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
@@ -1,6 +1,6 @@
1
1
  class Fe::Admin::EmailTemplatesController < ApplicationController
2
2
  before_filter :check_valid_user
3
- layout 'fe.admin'
3
+ layout 'fe/fe.admin'
4
4
 
5
5
  def index
6
6
  @email_templates = Fe::EmailTemplate.order('name')
@@ -27,7 +27,7 @@ class Fe::Admin::EmailTemplatesController < ApplicationController
27
27
  end
28
28
 
29
29
  def create
30
- @email_template = Fe::EmailTemplate.new(params[:email_template])
30
+ @email_template = Fe::EmailTemplate.new(email_template_params)
31
31
 
32
32
  respond_to do |format|
33
33
  if @email_template.save
@@ -42,8 +42,8 @@ class Fe::Admin::EmailTemplatesController < ApplicationController
42
42
  @email_template = Fe::EmailTemplate.find(params[:id])
43
43
 
44
44
  respond_to do |format|
45
- if @email_template.update_attributes(params[:email_template])
46
- format.html { redirect_to admin_email_templates_path }
45
+ if @email_template.update_attributes(email_template_params)
46
+ format.html { redirect_to fe_admin_email_templates_path }
47
47
  else
48
48
  format.html { render :action => "edit" }
49
49
  end
@@ -58,4 +58,10 @@ class Fe::Admin::EmailTemplatesController < ApplicationController
58
58
  format.html { redirect_to email_templates_path }
59
59
  end
60
60
  end
61
+
62
+ protected
63
+
64
+ def email_template_params
65
+ params.require(:email_template).permit(:name, :subject, :content)
66
+ end
61
67
  end
@@ -1,6 +1,6 @@
1
1
  class Fe::Admin::QuestionPagesController < ApplicationController
2
2
  before_filter :check_valid_user
3
- layout 'fe.admin'
3
+ layout 'fe/fe.admin'
4
4
 
5
5
  before_filter :get_sheet
6
6
 
@@ -104,10 +104,10 @@ class Fe::Admin::QuestionPagesController < ApplicationController
104
104
  # returns a list of existing Untitled forms
105
105
  # (having a separate method makes it easy to mock in the spec)
106
106
  def untitled_labels
107
- Page.where("label like 'Page%'").map {|s| s.label}
107
+ Fe::Page.where("label like 'Page%'").map {|s| s.label}
108
108
  end
109
109
 
110
110
  def page_params
111
- params.fetch(:page, {}).permit(:label, :hidden, :no_cache)
111
+ params.fetch(:fe_page, {}).permit(:label, :hidden, :no_cache)
112
112
  end
113
113
  end
@@ -4,7 +4,7 @@
4
4
  class Fe::Admin::QuestionSheetsController < ApplicationController
5
5
  before_filter :check_valid_user
6
6
  before_filter :get_question_sheet, :only => [:show, :archive, :unarchive, :destroy, :edit, :update, :duplicate]
7
- layout 'fe.admin'
7
+ layout 'fe/fe.admin'
8
8
 
9
9
  # list of all questionnaires/forms to edit
10
10
  # GET /question_sheets
@@ -52,7 +52,7 @@ class Fe::Admin::QuestionSheetsController < ApplicationController
52
52
 
53
53
  respond_to do |format|
54
54
  if @question_sheet.save
55
- format.html { redirect_to admin_question_sheet_path(@question_sheet) }
55
+ format.html { redirect_to fe_admin_question_sheet_path(@question_sheet) }
56
56
  format.xml { head :created, :location => admin_question_sheet_path(@question_sheet) }
57
57
  else
58
58
  format.html { render :action => "new" }
@@ -74,10 +74,11 @@ class Fe::Admin::QuestionSheetsController < ApplicationController
74
74
  # save changes to properties panel (label, language)
75
75
  # PUT /question_sheets/1
76
76
  def update
77
+ params.require(:fe_question_sheet).permit!
77
78
 
78
79
  respond_to do |format|
79
- if @question_sheet.update_attributes(params[:question_sheet])
80
- format.html { redirect_to admin_question_sheet_path(@question_sheet) }
80
+ if @question_sheet.update_attributes(params[:fe_question_sheet])
81
+ format.html { redirect_to fe_admin_question_sheet_path(@question_sheet) }
81
82
  format.js
82
83
  format.xml { head :ok }
83
84
  else
@@ -94,7 +95,7 @@ class Fe::Admin::QuestionSheetsController < ApplicationController
94
95
  @question_sheet.destroy
95
96
 
96
97
  respond_to do |format|
97
- format.html { redirect_to admin_question_sheets_path }
98
+ format.html { redirect_to fe_admin_question_sheets_path }
98
99
  format.xml { head :ok }
99
100
  end
100
101
  end
@@ -0,0 +1,183 @@
1
+ module Fe
2
+ class ApplicationsController < ApplicationController
3
+ append_before_filter :check_valid_user, :only => [:show, :collated_refs, :no_conf, :no_ref]
4
+ append_before_filter :setup
5
+ append_before_filter :set_title
6
+
7
+ layout 'fe/application'
8
+
9
+ # dashboard
10
+ def index
11
+ redirect_to :action => :show_default
12
+ end
13
+
14
+ def show_default
15
+ @application = get_application
16
+ setup_view
17
+
18
+ render :template => 'fe/answer_sheets/edit'
19
+ end
20
+
21
+ # create app
22
+ def create
23
+ @question_sheet = Fe::QuestionSheet.find(params[:question_sheet_id])
24
+ @application = @person.applications.build
25
+
26
+ @application.save!
27
+ @application.question_sheets << @question_sheet
28
+ redirect_to fe_application_path(@application)
29
+ end
30
+
31
+ # edit an apply
32
+ def edit
33
+ @application = Application.find(params[:id]) unless @application
34
+
35
+ if @application.applicant == current_user.person
36
+ setup_view
37
+
38
+ render :template => 'fe/answer_sheets/edit'
39
+ else
40
+ no_access
41
+ end
42
+
43
+ end
44
+
45
+ def show
46
+ @application = Application.find(params[:id]) unless @application
47
+ @answer_sheets = @application.answer_sheets
48
+ @show_conf = true
49
+ @viewing = true
50
+
51
+ if @answer_sheets.empty?
52
+ render :action => :too_old
53
+ #raise "No applicant sheets in sleeve '#{@application.sleeve.title}'."
54
+ return
55
+ end
56
+ #render :layout => 'admin_application'
57
+ end
58
+
59
+ def no_ref
60
+ @application = Application.find(params[:id]) unless @application
61
+ @answer_sheets = [@application]
62
+ @show_conf = true
63
+
64
+ if @answer_sheets.empty?
65
+ render :action => :too_old
66
+ #raise "No applicant sheets in sleeve '#{@application.sleeve.title}'."
67
+ return
68
+ end
69
+
70
+ #render :layout => 'admin_application', :template => 'fe/applys/show'
71
+ render :template => 'fe/applys/show'
72
+ end
73
+
74
+ def no_conf
75
+ @application = Application.find(params[:id]) unless @application
76
+ @answer_sheets = [@application]
77
+ @show_conf = false
78
+
79
+ if @answer_sheets.empty?
80
+ render :action => :too_old
81
+ #raise "No applicant sheets in sleeve '#{@application.sleeve.title}'."
82
+ return
83
+ end
84
+
85
+ #render :layout => 'admin_application', :template => 'fe/applys/show'
86
+ render :template => 'fe/applys/show'
87
+ end
88
+
89
+ def collated_refs
90
+ @application = Application.find(params[:id]) unless @application
91
+ @answer_sheets = @application.references
92
+
93
+ if @answer_sheets.empty?
94
+ render :action => :too_old
95
+ #raise "No applicant sheets in sleeve '#{@application.sleeve.title}'."
96
+ return
97
+ end
98
+
99
+ @reference_question_sheet = Fe::QuestionSheet.find(2) #TODO: constant
100
+
101
+ setup_reference("staff")
102
+ setup_reference("discipler")
103
+ setup_reference("roommate")
104
+ setup_reference("friend")
105
+
106
+ @show_conf = true
107
+ end
108
+
109
+ def setup_reference(type)
110
+ ref = nil
111
+ eval("ref = @" + type + "_reference = @application." + type + "_reference")
112
+ raise type unless ref
113
+ answer_sheet = ref
114
+ question_sheet = answer_sheet.question_sheet
115
+ if question_sheet
116
+ elements = []
117
+ question_sheet.pages.order(:number).each do |page|
118
+ elements << page.elements.where("#{Fe::Element.table_name}.kind not in (?)", %w(Fe::Paragraph)).to_a
119
+ end
120
+ elements = elements.flatten
121
+ elements.reject! {|e| e.is_confidential} if @show_conf == false
122
+ eval("@" + type + "_elements = Fe::QuestionSet.new(elements, answer_sheet).elements")
123
+ else
124
+ eval("@" + type + "_elements = []")
125
+ end
126
+
127
+ end
128
+
129
+ def no_access
130
+ redirect_to '/'
131
+ end
132
+
133
+ protected
134
+ def setup
135
+ @person = get_person # current visitor_id
136
+ end
137
+
138
+ def get_year
139
+ Application::YEAR
140
+ end
141
+
142
+ def get_person
143
+ @person ||= current_person
144
+ return nil unless @person
145
+ @person.current_address = ::Fe::Address.new(:address_type =>'current') unless @person.current_address
146
+ @person.emergency_address1 = ::Fe::Address.new(:address_type =>'emergency1') unless @person.emergency_address1
147
+ @person.permanent_address = ::Fe::Address.new(:address_type =>'permanent') unless @person.permanent_address
148
+ return @person
149
+ end
150
+
151
+ def get_application
152
+ unless @application
153
+ @person ||= get_person
154
+ # if this is the user's first visit, we will need to create an apply
155
+ if @person.application.nil?
156
+ create_application
157
+ @application.save!
158
+ @person.application = @app
159
+ else
160
+ @application ||= @person.application
161
+ end
162
+ end
163
+ @application
164
+ end
165
+
166
+ def create_application
167
+ @application = Fe::Application.create :applicant_id => @person.id
168
+ end
169
+
170
+ def setup_view
171
+ @answer_sheet = @application
172
+ # edit the first page
173
+ @presenter = Fe::AnswerPagesPresenter.new(self, @answer_sheet)
174
+ @elements = @presenter.questions_for_page(:first).elements
175
+ @page = @presenter.pages.first
176
+ @presenter.active_page ||= @page
177
+ end
178
+
179
+ def set_title
180
+ @title = "Form Engine"
181
+ end
182
+ end
183
+ end
@@ -1,8 +1,11 @@
1
1
  module Fe::AnswerPagesControllerConcern
2
2
  extend ActiveSupport::Concern
3
3
 
4
- included do
5
- before_filter :get_answer_sheet, :only => [:edit, :update, :save_file, :index]
4
+ begin
5
+ included do
6
+ before_filter :get_answer_sheet, :only => [:edit, :update, :save_file, :index]
7
+ end
8
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
6
9
  end
7
10
 
8
11
  def edit
@@ -1,9 +1,12 @@
1
1
  module Fe::AnswerSheetsControllerConcern
2
2
  extend ActiveSupport::Concern
3
3
 
4
- included do
5
- layout 'application'
6
- before_filter :get_answer_sheet, :only => [:edit, :show, :send_reference_invite, :submit]
4
+ begin
5
+ included do
6
+ layout 'fe/application'
7
+ before_filter :get_answer_sheet, :only => [:edit, :show, :send_reference_invite, :submit]
8
+ end
9
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
7
10
  end
8
11
 
9
12
  # list existing answer sheets
@@ -46,8 +49,8 @@ module Fe::AnswerSheetsControllerConcern
46
49
  @elements = Fe::QuestionSet.new(@elements, @answer_sheet).elements.group_by{ |e| e.pages.first }
47
50
  end
48
51
 
49
- def send_reference_invite
50
- @reference = @answer_sheet.reference_sheets.find(params[:reference_id])
52
+ def send_reference_invite(reference = nil)
53
+ @reference = reference || @answer_sheet.reference_sheets.find(params[:reference_id])
51
54
  if params[:reference]
52
55
  reference_params = params.fetch(:reference)[@reference.id.to_s].permit(:relationship, :title, :first_name, :last_name, :phone, :email, :is_staff)
53
56
 
@@ -66,6 +69,7 @@ module Fe::AnswerSheetsControllerConcern
66
69
 
67
70
  protected
68
71
  def answer_sheet_type
72
+ return Fe::ReferenceSheet if params[:controller] == "fe/reference_sheets"
69
73
  (params[:answer_sheet_type] || Fe.answer_sheet_class || 'AnswerSheet').constantize
70
74
  end
71
75
 
@@ -81,4 +85,4 @@ module Fe::AnswerSheetsControllerConcern
81
85
  end
82
86
  return true
83
87
  end
84
- end
88
+ end
@@ -0,0 +1,34 @@
1
+ module Fe::ApplicationControllerConcern
2
+ extend ActiveSupport::Concern
3
+
4
+ begin
5
+ included do
6
+ helper_method :fe_user
7
+ end
8
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
9
+ end
10
+
11
+ def fe_user
12
+ return nil unless current_user
13
+ @fe_user ||= Fe::User.where(:user_id => current_user.id).first
14
+ if @fe_user
15
+ @fe_user.update_attribute(:last_login, Time.now)
16
+ session[:login_stamped] = true
17
+ end
18
+ @fe_user
19
+ end
20
+
21
+ def current_person
22
+ #raise "no user" unless current_user
23
+ return nil unless current_user
24
+ current_user.fe_person || Fe::Person.create(:user_id => current_user.id)
25
+ end
26
+
27
+ def check_valid_user
28
+ unless fe_user
29
+ # TODO redirect to somewhere better
30
+ redirect_to "/", flash: { error: "Access denied" }
31
+ return false
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,184 @@
1
+ # gather payment information from Applicant
2
+ module Fe
3
+ class PaymentsController < ApplicationController
4
+ prepend_before_filter :ssm_login_required, :except => [:edit, :update]
5
+ prepend_before_filter :cas_filter, :authentication_filter, :only => [:edit, :update]
6
+ before_filter :setup, :except => [:edit, :update, :approve]
7
+
8
+ # Allow applicant to edit payment
9
+ # /applications/1/payment_page/edit
10
+ # js: provide a partial to replace the answer_sheets page area
11
+ def edit
12
+ @payment = Fe::Payment.find(params[:id])
13
+ @application = @payment.answer_sheet
14
+ # if this isn't a staff payment they shouldn't be here for this staff person
15
+ unless 'Staff' == @payment.payment_type && current_person.isStaff?
16
+ render('no_access') and return
17
+ end
18
+ @payment.status = "Approved" # set the status so a default radio button will be selected
19
+ end
20
+
21
+ def create
22
+ Fe::Payment.transaction do
23
+ @payment = @application.payments.new(payment_params)
24
+ if @application.payments.non_denied.length > 0
25
+ @payment.errors.add(:base, "You have already submitted a payment for this application.")
26
+ render :action => "error"
27
+ else
28
+ @payment.amount = Fe.cost
29
+ @payment.status = 'Pending'
30
+ if @payment.valid?
31
+ case @payment.payment_type
32
+ when "Credit Card"
33
+ card_type = params[:payment][:card_type]
34
+
35
+ creditcard = ActiveMerchant::Billing::CreditCard.new(
36
+ :brand => card_type,
37
+ :number => @payment.card_number,
38
+ :month => @payment.expiration_month,
39
+ :year => @payment.expiration_year,
40
+ :verification_value => @payment.security_code,
41
+ :first_name => @payment.first_name,
42
+ :last_name => @payment.last_name
43
+ )
44
+
45
+ if creditcard.valid?
46
+ response = GATEWAY.purchase(@payment.amount * 100, creditcard)
47
+
48
+ if response.success?
49
+ @payment.approve!
50
+ # TODO: Send notification email
51
+ else
52
+ @payment.errors.add(:base, "Credit card transaction failed: #{response.message}")
53
+ #Send email this way instead of raising error in order to still give an error message to user.
54
+ # Fe::Notifier.notification('programmers@cojourners.com', # RECIPIENTS
55
+ # "sp_error@uscm.org", # FROM
56
+ # "Credit Card Error", # LIQUID TEMPLATE NAME
57
+ # {'error' => "Credit card transaction failed: #{response.message} \n #{response.inspect} \n #{creditcard.inspect}"}).deliver
58
+ end
59
+ else
60
+ @payment.errors.add(:card_number, "is invalid. Check the number and/or the expiration date.")
61
+ end
62
+ when "Mail"
63
+ @payment.approve!
64
+ when "Staff"
65
+ @payment.save
66
+ send_staff_payment_request(@payment)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def update
74
+ @payment = Fe::Payment.includes({:application => :applicant}).find(params[:id])
75
+ @application = @payment.answer_sheet
76
+ @person = @application.applicant
77
+ @payment.status = params[:payment][:status]
78
+ staff_approval
79
+ @payment.save!
80
+ staff_payment_processed_email(@payment)
81
+ @payment.answer_sheet.complete
82
+ end
83
+
84
+ def approve
85
+ @payment = Fe::Payment.find(params[:id])
86
+ @application = @payment.answer_sheet
87
+ @payment.auth_code = si_user.user.person.account_no
88
+ case @payment.payment_type
89
+ when 'Staff'
90
+ staff_approval
91
+ staff_payment_processed_email(@payment)
92
+ when 'Mail'
93
+ Fe::Notifier.notification(@application.email, # RECIPIENTS
94
+ Fe.from_email, # FROM
95
+ "Check Received", # LIQUID TEMPLATE NAME
96
+ {'name' => @application.applicant.informal_full_name}).deliver
97
+ end
98
+ @payment.approve!
99
+ @payment.application.complete
100
+ end
101
+
102
+ # TODO this be moved to a decorotor or cru_lib as per Josh's instructions not to have Staff code in FE
103
+ def staff_search
104
+ #@payment = @application.payments.new(params[:payment].slice(:payment_type, :payment_account_no, :auth_code))
105
+ @payment = @application.payments.new(staff_search_payment_params)
106
+ if @payment.staff_first.to_s.strip.empty? || @payment.staff_last.to_s.strip.empty?
107
+ render; return
108
+ end
109
+ @results = Staff.order('"lastName", "firstName"').where("(\"firstName\" like ? OR \"preferredName\" like ?) AND \"lastName\" like ? and \"removedFromPeopleSoft\" <> 'Y'", @payment.staff_first+'%', @payment.staff_first+'%', @payment.staff_last+'%')
110
+ end
111
+
112
+ def destroy
113
+ @payment = @application.payments.find(params[:id])
114
+ @payment.destroy
115
+ end
116
+
117
+ protected
118
+
119
+ def setup
120
+ if app_user && app_user.can_su_application?
121
+ @answer_sheet = @application = Fe.answer_sheet_class.constantize.find(params[:application_id])
122
+ else
123
+ @answer_sheet = @application = current_person.applications.find(params[:application_id])
124
+ end
125
+ end
126
+
127
+ def send_staff_payment_request(payment)
128
+ @person = @application.applicant
129
+ staff = Staff.find_by(accountNo: payment.payment_account_no)
130
+ raise "Invalid staff payment request: " + payment.inspect if staff.nil?
131
+ Fe::Notifier.notification(staff.email, # RECIPIENTS
132
+ Fe.from_email, # FROM
133
+ "Staff Payment Request", # LIQUID TEMPLATE NAME
134
+ {'staff_full_name' => staff.informal_full_name, # HASH OF VALUES FOR REPLACEMENT IN LIQUID TEMPLATE
135
+ 'applicant_full_name' => @person.informal_full_name,
136
+ 'applicant_email' => @person.email,
137
+ 'applicant_home_phone' => @person.current_address.home_phone,
138
+ 'payment_request_url' => url_for(:action => :edit, :application_id => @application.id, :id => @payment.id)},
139
+ {:format => :html}).deliver
140
+ end
141
+
142
+ def staff_approval
143
+ @payment.auth_code = current_person.account_no
144
+ if @payment.status == "Other Account"
145
+ @payment.payment_account_no = params[:other_account]
146
+ @payment.approve!
147
+ end
148
+ end
149
+
150
+ def staff_payment_processed_email(payment)
151
+ # Send appropriate email
152
+ if payment.approved?
153
+ # Send receipt to applicant
154
+ Fe::Notifier.notification(@application.applicant.email, # RECIPIENTS
155
+ Fe.from_email, # FROM
156
+ "Applicant Staff Payment Receipt", # LIQUID TEMPLATE NAME
157
+ {'applicant_full_name' => @application.applicant.informal_full_name}).deliver
158
+ # Send notice to Tool Owner
159
+ Fe::Notifier.notification(Fe.from_email, # RECIPIENTS - HARD CODED!
160
+ Fe.from_email, # FROM
161
+ "Tool Owner Payment Confirmation", # LIQUID TEMPLATE NAME
162
+ {'payment_amount' => "$" + @payment.amount.to_s,
163
+ 'payment_account_no' => @payment.payment_account_no,
164
+ 'payment_auth_code' => @payment.auth_code,
165
+ 'payment_id' => @payment.id}).deliver
166
+ else
167
+ # Sent notice to applicant that payment was declined
168
+ Fe::Notifier.notification(@application.email, # RECIPIENTS
169
+ Fe.from_email, # FROM
170
+ "Payment Refusal", # LIQUID TEMPLATE NAME
171
+ {'applicant_full_name' => @application.applicant.informal_full_name}).deliver
172
+ end
173
+ end
174
+
175
+ def payment_params
176
+ params.require(:payment).permit(:payment_type, :payment_account_no, :auth_code, :first_name, :last_name, :address,
177
+ :city, :state, :zip, :card_number, :card_type, :expiration_month, :expiration_year, :security_code)
178
+ end
179
+
180
+ def staff_search_payment_params
181
+ params.require(:payment).permit(:payment_type, :staff_first, :staff_last)
182
+ end
183
+ end
184
+ end