fe 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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