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
@@ -21,6 +21,5 @@ module Fe
21
21
  def has_response?(answer_sheet = nil)
22
22
  elements.any? {|e| e.has_response?(answer_sheet)}
23
23
  end
24
-
25
24
  end
26
- end
25
+ end
@@ -79,4 +79,4 @@ module Fe
79
79
  end
80
80
 
81
81
  end
82
- end
82
+ end
@@ -42,7 +42,7 @@ module Fe
42
42
  # Question elements get associated
43
43
  # non-question elements get cloned
44
44
  def duplicate
45
- new_sheet = QuestionSheet.new(self.attributes)
45
+ new_sheet = QuestionSheet.new(self.attributes.merge(id: nil))
46
46
  new_sheet.label = self.label + ' - COPY'
47
47
  new_sheet.save(:validate => false)
48
48
  self.pages.each do |page|
@@ -51,6 +51,12 @@ module Fe
51
51
  new_sheet
52
52
  end
53
53
 
54
+ # pages hidden by a conditional element
55
+ def hidden_pages(answer_sheet)
56
+ elements.find_all{ |e|
57
+ e.conditional.is_a?(Fe::Page) && !e.conditional_match(answer_sheet)
58
+ }.collect(&:conditional)
59
+ end
54
60
 
55
61
  private
56
62
 
@@ -62,7 +68,7 @@ module Fe
62
68
  # returns a list of existing Untitled forms
63
69
  # (having a separate method makes it easy to mock in the spec)
64
70
  def self.untitled_labels
65
- QuestionSheet.find(:all, :conditions => %{label like 'Untitled form%'}).map {|s| s.label}
71
+ QuestionSheet.where("label LIKE ?", 'Untitled form%').map{|s| s.label }
66
72
  end
67
73
 
68
74
  def check_for_answers
@@ -70,4 +76,4 @@ module Fe
70
76
  end
71
77
 
72
78
  end
73
- end
79
+ end
@@ -35,8 +35,8 @@ module Fe
35
35
 
36
36
  # which view to render this element?
37
37
  def ptemplate
38
- "reference_#{style}"
38
+ "fe/reference_#{style}"
39
39
  end
40
40
 
41
41
  end
42
- end
42
+ end
@@ -1,3 +1,4 @@
1
+ require 'validates_email_format_of'
1
2
  require 'aasm'
2
3
  module Fe
3
4
  class ReferenceSheet < ActiveRecord::Base
@@ -16,6 +17,7 @@ module Fe
16
17
  :foreign_key => "applicant_answer_sheet_id"
17
18
 
18
19
  validates_presence_of :first_name, :last_name, :phone, :email, :relationship, :on => :update, :message => "can't be blank"
20
+ validates :email, :email_format => { :message => "doesn't look right." }
19
21
 
20
22
  delegate :style, :to => :question
21
23
 
@@ -32,7 +34,29 @@ module Fe
32
34
  state :completed, :enter => Proc.new {|ref|
33
35
  ref.submitted_at = Time.now
34
36
  # SpReferenceMailer.deliver_completed(ref)
37
+ =begin
38
+ Fe::Notifier.notification(ref.email, # RECIPIENTS
39
+ Fe.from_email, # FROM
40
+ # TODO
41
+ "Reference Completed", # LIQUID TEMPLATE NAME
42
+ {'first_name' => person.nickname,
43
+ 'site_url' => "#{APP_CONFIG['spgive_url']}/#{person.sp_gcx_site}/",
44
+ 'username' => person.user.username,
45
+ 'password' => person.user.password_plain}).deliver
46
+ =end
47
+
35
48
  # SpReferenceMailer.deliver_completed_confirmation(ref)
49
+ =begin
50
+ Fe::Notifier.notification(ref.applicant_answer_sheet.person.email, # RECIPIENTS
51
+ Fe.from_email, # FROM
52
+ "Reference Completed To Applicant", # LIQUID TEMPLATE NAME
53
+ # TODO
54
+ {'first_name' => person.nickname,
55
+ 'site_url' => "#{APP_CONFIG['spgive_url']}/#{person.sp_gcx_site}/",
56
+ 'username' => person.user.username,
57
+ 'password' => person.user.password_plain}).deliver
58
+ =end
59
+
36
60
  ref.applicant_answer_sheet.complete(ref)
37
61
  }
38
62
 
@@ -68,13 +92,13 @@ module Fe
68
92
  application = self.applicant_answer_sheet
69
93
 
70
94
  Notifier.notification(self.email,
71
- application.email,
95
+ Fe.from_email,
72
96
  "Reference Invite",
73
97
  {'reference_full_name' => self.name,
74
98
  'applicant_full_name' => application.name,
75
99
  'applicant_email' => application.email,
76
100
  'applicant_home_phone' => application.phone,
77
- 'reference_url' => edit_reference_sheet_url(self, :a => self.access_key, :host => ActionMailer::Base.default_url_options[:host])}).deliver
101
+ 'reference_url' => edit_fe_reference_sheet_url(self, :a => self.access_key, :host => ActionMailer::Base.default_url_options[:host])}).deliver
78
102
  # Send notification to applicant
79
103
  Notifier.notification(applicant_answer_sheet.email, # RECIPIENTS
80
104
  Fe.from_email, # FROM
@@ -82,7 +106,7 @@ module Fe
82
106
  {'applicant_full_name' => applicant_answer_sheet.name,
83
107
  'reference_full_name' => self.name,
84
108
  'reference_email' => self.email,
85
- 'application_url' => edit_answer_sheet_url(applicant_answer_sheet, :host => ActionMailer::Base.default_url_options[:host])}).deliver
109
+ 'application_url' => edit_fe_answer_sheet_url(applicant_answer_sheet, :host => ActionMailer::Base.default_url_options[:host])}).deliver
86
110
 
87
111
  self.email_sent_at = Time.now
88
112
  self.save(:validate => false)
@@ -146,4 +170,4 @@ module Fe
146
170
  end
147
171
  end
148
172
  end
149
- end
173
+ end
@@ -9,4 +9,4 @@
9
9
  module Fe
10
10
  class Section < Element
11
11
  end
12
- end
12
+ end
@@ -7,4 +7,4 @@ module Fe
7
7
  @states = Carmen.states(country)
8
8
  end
9
9
  end
10
- end
10
+ end
@@ -7,9 +7,9 @@ module Fe
7
7
  # which view to render this element?
8
8
  def ptemplate
9
9
  if self.style == 'essay'
10
- 'text_area_field'
10
+ 'fe/text_area_field'
11
11
  else
12
- 'text_field'
12
+ 'fe/text_field'
13
13
  end
14
14
  end
15
15
 
@@ -26,4 +26,4 @@ module Fe
26
26
  end
27
27
 
28
28
  end
29
- end
29
+ end
@@ -0,0 +1,3 @@
1
+ class Fe::User < ActiveRecord::Base
2
+ belongs_to :user
3
+ end
@@ -0,0 +1,120 @@
1
+ class Staff < ActiveRecord::Base
2
+ self.table_name = "ministry_staff"
3
+ belongs_to :person
4
+
5
+ belongs_to :primary_address, :class_name => "StaffAddress", :foreign_key => :fk_primaryAddress
6
+ belongs_to :secondary_address, :class_name => "StaffAddress", :foreign_key => :fk_secondaryAddress
7
+
8
+ def self.get_staff(ssm_id)
9
+ if ssm_id.nil? then raise "nil ssm_id!" end
10
+ ssm_user = User.find_by(userID: ssm_id)
11
+ if ssm_user.nil? then raise "ssm_id doesn't exist: #{ssm_id}" end
12
+ username = ssm_user.username
13
+ profile = StaffsiteProfile.find_by(userName: username)
14
+ account_no = profile.accountNo
15
+ staff = Staff.find_by(accountNo: account_no)
16
+ end
17
+
18
+ def self.field_roles
19
+ @@field_roles ||= ['Director (Direct Ministry)','Team Leader (Direct Ministry)','Team Member - Mom','Field Staff In Training','Raising Support Full Time','Seminary Staff','Field Staff','Local Leader']
20
+ end
21
+
22
+ def self.strategy_order
23
+ @@strategy_order ||= ['National Director','Operations','HR','LD','Fund Dev','CFM','FLD','EFM','DES','EPI','ESS','NTN','BRD','WSN','GLM','R&D','SR','SV','SSS','JPO','LHS','']
24
+ end
25
+
26
+ def self.strategies
27
+ @@strategies ||= {
28
+ 'National Director' => 'National Director',
29
+ 'Operations' => 'Operations',
30
+ 'HR' => 'Leadership Development',
31
+ 'LD' => 'Leadership Development',
32
+ 'Fund Dev' => 'Fund Development',
33
+ 'CFM' => 'Campus Field Ministry',
34
+ 'FLD' => 'Campus Field Ministry',
35
+ 'SV' => 'Cru High School',
36
+ 'EFM' => 'Ethnic Field Ministry',
37
+ 'DES' => 'Destino',
38
+ 'EPI' => 'Epic',
39
+ 'ESS' => 'Every Student Sent',
40
+ 'NTN' => 'Nations',
41
+ 'BRD' => 'Bridges',
42
+ 'WSN' => 'Global Missions',
43
+ 'GLM' => 'Global Missions',
44
+ 'R&D' => 'Research and Development',
45
+ 'LHS' => 'Lake Hart Stint'
46
+ }
47
+ end
48
+
49
+ def self.staff_positions
50
+ @@staff_positions ||= [
51
+ "Associate Staff",
52
+ "Staff Full Time",
53
+ "Hourly Full Time",
54
+ "Hourly on Call",
55
+ "Salaried Exempt Full Time",
56
+ "Salaried w Desig #",
57
+ "Self-Supported Staff",
58
+ "Staff on Delayed Payroll",
59
+ "Staff on Paid Leave",
60
+ "Staff on Unpaid Leave",
61
+ "Staff Raising Init Supprt",
62
+ "Affiliate",
63
+ "Volunteer Full Time",
64
+ "Volunteer Part Time",
65
+ "Ministry Intern A",
66
+ "Ministry Intern A Part Time",
67
+ "Ministry Intern Hourly Part Tm",
68
+ "STINT Full Time",
69
+ "Staff Part Time"
70
+ ]
71
+ end
72
+
73
+ scope :specialty_roles, -> { where(:jobStatus => "Staff Full Time").where(:ministry => "Campus Ministry").
74
+ where(:removedFromPeopleSoft => "N").where("jobTitle NOT IN (?)", field_roles).order(:jobTitle).order(:lastName) }
75
+
76
+ def self.get_roles(region)
77
+ result = {}
78
+ Staff.strategy_order.each do |strategy|
79
+ result[strategy] = specialty_roles.where(:strategy => strategy).where(:region => region)
80
+ end
81
+ result
82
+ end
83
+
84
+ def email
85
+ self[:email].present? ? self[:email] : self.person.try(:email)
86
+ end
87
+
88
+ # "first_name last_name"
89
+ def full_name
90
+ firstName.to_s + " " + lastName.to_s
91
+ end
92
+
93
+ def informal_full_name
94
+ nickname.to_s + " " + lastName.to_s
95
+ end
96
+
97
+ def nickname
98
+ (!preferred_name.to_s.strip.empty?) ? preferred_name : firstName
99
+ end
100
+
101
+ def is_active?
102
+ removedFromPeopleSoft != "Y"
103
+ end
104
+
105
+ def is_hr?
106
+ strategy == "HR" || strategy == "LD"
107
+ end
108
+
109
+ def is_director?
110
+ jobTitle && jobTitle.include?("Director")
111
+ end
112
+
113
+ def is_hr_director?
114
+ jobTitle && jobTitle.include?("Director (HR)")
115
+ end
116
+
117
+ def is_removed?
118
+ removedFromPeopleSoft == "Y" ? true : false
119
+ end
120
+ end
@@ -1 +1,11 @@
1
- <%= error_messages_for :element %>
1
+ <% if @element.errors.any? %>
2
+ <div class="errors">
3
+ <h2>There was a problem saving this element</h2>
4
+ <ul>
5
+ <% @element.errors.full_messages.each do |msg| %>
6
+ <li><%= msg %></li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
10
+ <% end %>
11
+
@@ -1,11 +1,11 @@
1
1
  <% if @page_element %>
2
2
  $('#question_modal').dialog('close');
3
- $('#page-preview').html('<%= escape_javascript(render('admin/question_pages/question_page')) %>');
3
+ $('#page-preview').html('<%= escape_javascript(render('fe/admin/question_pages/question_page')) %>');
4
4
  $('#element_<%= dom_id(@element) %>').hide();
5
- $('#element_form_<%= dom_id(@element) %>').html('<%= escape_javascript(render('admin/panels/prop_element',:element => @element)) %>');
5
+ $('#element_form_<%= dom_id(@element) %>').html('<%= escape_javascript(render('fe/admin/panels/prop_element',:element => @element)) %>');
6
6
  $('#element_form_<%= dom_id(@element) %>').show();
7
7
  selectElement("#element_<%= @element.id %>");
8
8
  $.scrollTo("#element_<%= @element.id %>");
9
9
  <% else %>
10
10
  alert('That question already exists on this question sheet')
11
- <% end %>
11
+ <% end %>
@@ -1,4 +1,4 @@
1
1
  $('#element_<%= @element.id %>').remove()
2
- $('#panel').html('<%= escape_javascript(render('admin/panels/insert')) %>')
2
+ $('#panel').html('<%= escape_javascript(render('fe/admin/panels/insert')) %>')
3
3
  activeElement = ''
4
- switchTab('insert')
4
+ switchTab('insert')
@@ -1,2 +1,2 @@
1
- $('#page-preview').html('<%= escape_javascript(render('admin/question_pages/question_page', :page => @page)) %>')
1
+ $('#page-preview').html('<%= escape_javascript(render('fe/admin/question_pages/question_page', :page => @page)) %>')
2
2
  $('#list-pages li').removeClass('active')
@@ -1,2 +1,2 @@
1
- $('#page-preview').html('<%= escape_javascript(render('admin/question_pages/question_page')) %>')
1
+ $('#page-preview').html('<%= escape_javascript(render('fe/admin/question_pages/question_page')) %>')
2
2
  selectElement("#element_<%= @element.id %>")
@@ -1,4 +1,4 @@
1
1
  $('#element_<%= dom_id(@element) %>').hide()
2
- $('#element_form_<%= dom_id(@element) %>').html('<%= escape_javascript(render('admin/panels/prop_element',:element => @element)) %>')
2
+ $('#element_form_<%= dom_id(@element) %>').html('<%= escape_javascript(render('fe/admin/panels/prop_element',:element => @element)) %>')
3
3
  $('#element_form_<%= dom_id(@element) %>').show();
4
4
  selectElement("#element_<%= @element.id %>")
@@ -1,4 +1,4 @@
1
1
  $('#errors').html('<%= escape_javascript(render('errors', :element => @element)) %>')
2
2
  <% @element.errors.each do |attr_name, message| %>
3
3
  addError('element_<%= attr_name %>')
4
- <% end %>
4
+ <% end %>
@@ -1,10 +1,10 @@
1
1
  if ($('#question_modal')[0] == null) {
2
2
  $('body').append('<div id="question_modal"></div>');
3
3
  }
4
- $('#question_modal').html('<%= link_to("Add \"#{params[:human_type]}\"", admin_question_sheet_page_elements_path(:question_sheet_id => @page.question_sheet_id, :page_id => @page.id,
4
+ $('#question_modal').html('<%= link_to("Add \"#{params[:human_type]}\"", fe_admin_question_sheet_page_elements_path(:question_sheet_id => @page.question_sheet_id, :page_id => @page.id,
5
5
  :element_type => params[:element_type], "element[style]" => @style, format: :js),
6
6
  :remote => true,
7
7
  :method => :post,
8
8
  :class => "add_type") %><p>Or you can also use an existing <%= params[:human_type] %> element. If you are unsure, just <strong>Add <%= params[:human_type] %>.</strong></p><div id="questions_div" title=""></div>');
9
- $('#questions_div').html("<%= escape_javascript(render('questions/questions', :questions => @questions)) %>")
10
- $('#question_modal').dialog({width: 500, height: 400});
9
+ $('#questions_div').html("<%= escape_javascript(render('fe/questions/fe/questions', :questions => @questions)) %>")
10
+ $('#question_modal').dialog({width: 500, height: 400});
@@ -1,9 +1,9 @@
1
1
  $('#element_form_<%= dom_id(@element) %>').hide();
2
- $('#element_<%= dom_id(@element) %>').html('<%= escape_javascript(render('admin/question_pages/element_show', :element => @element)) %>')
2
+ $('#element_<%= dom_id(@element) %>').html('<%= escape_javascript(render('fe/admin/question_pages/element_show', :element => @element)) %>')
3
3
  $('#element_<%= dom_id(@element) %>').show()
4
4
  clearCurrentElement()
5
5
  $('#questions_list').sortable('refresh');
6
6
 
7
7
  <% @page.question_grids.each do |grid| %>
8
8
  $('#questions_list_<%= grid.id %>').sortable('refresh');
9
- <% end %>
9
+ <% end %>
@@ -1,13 +1,13 @@
1
1
  <div id="content">
2
- <h1>Edit Email Template</h1>
3
-
4
- <%= error_messages_for :email_template %>
5
-
6
- <%= form_for(:email_template, :url => admin_email_template_path(@email_template), :html => { :method => :put } ) do |f| %>
7
- <%= render :partial => 'form', :locals => {:f => f} %>
8
-
9
- <p><%= submit_tag "Update" %> or <%= link_to "Cancel", admin_email_templates_path, :class => "cancel" %></p>
10
- <% end %>
2
+ <h1>Edit Email Template</h1>
3
+
4
+ <%= error_messages_for :email_template %>
5
+
6
+ <%= form_for(:email_template, :url => fe_admin_email_template_path(@email_template), :html => { :method => :put } ) do |f| %>
7
+ <%= render 'form', f: f %>
8
+
9
+ <p><%= submit_tag "Update" %> or <%= link_to "Cancel", fe_admin_email_templates_path, :class => "cancel" %></p>
10
+ <% end %>
11
11
 
12
12
 
13
13
  </div>
@@ -8,13 +8,13 @@
8
8
  </tr>
9
9
  <% for email_template in @email_templates %>
10
10
  <tr class="<%= cycle("","alt") %>">
11
- <td><%= link_to email_template.name, edit_admin_email_template_path(email_template), :class => "email-template" %></td>
12
- <td class="actions"><%= link_to 'Destroy', admin_email_template_path(email_template), data: {confirm: 'Are you sure?'}, :method => :delete, :class => "destroy" %></td>
11
+ <td><%= link_to email_template.name, edit_fe_admin_email_template_path(email_template), :class => "email-template" %></td>
12
+ <td class="actions"><%= link_to 'Destroy', fe_admin_email_template_path(email_template), data: {confirm: 'Are you sure?'}, :method => :delete, :class => "destroy" %></td>
13
13
  </tr>
14
14
  <% end %>
15
15
  </table>
16
16
 
17
17
  <br />
18
18
 
19
- <%= link_to 'New Template', new_admin_email_template_path, :method => :GET, :class => "add-link" %>
19
+ <%= link_to 'New Template', new_fe_admin_email_template_path, :method => :GET, :class => "add-link" %>
20
20
  </div>
@@ -3,9 +3,9 @@
3
3
 
4
4
  <%= error_messages_for :email_template %>
5
5
 
6
- <%= form_for(:email_template, :url => admin_email_templates_path) do |f| %>
6
+ <%= form_for(:email_template, :url => fe_admin_email_templates_path) do |f| %>
7
7
  <%= render :partial => 'form', :locals => {:f => f}%>
8
8
 
9
- <p><%= submit_tag "Create" %> or <%= link_to "Cancel", admin_email_templates_path, :class => "cancel" %></p>
9
+ <p><%= submit_tag "Create" %> or <%= link_to "Cancel", fe_admin_email_templates_path, :class => "cancel" %></p>
10
10
  <% end %>
11
11
  </div>
@@ -5,6 +5,33 @@
5
5
  <h3>Advanced Options<br/>
6
6
  <a style="font-size: 11px; font-weight: normal; " href="#" onclick="$('#<%= dom_id(element) %>-pnl-advanced').hide();$('#<%= dom_id(element) %>-h3-show-advanced-options').show();return false;">Hide Advanced Options</a></h3>
7
7
 
8
+ <div class='future_affect'>
9
+ <%= label_tag "Future questions/pages will be shown based on the answer to this question: " %>
10
+ <%= radio_button_tag :future_affect, "yes" %>
11
+ <%= label_tag :future_affect_yes, "Yes" %>
12
+ <%= radio_button_tag :future_affect, "no" %>
13
+ <%= label_tag :future_affect_no, "No" %>
14
+ <% if @element.conditional.present? %>
15
+ <script>$(function() { $("#future_affect_yes").click(); });</script>
16
+ <% end %>
17
+ <div class='future_answer' style='display:none'>
18
+ What answer should show the element or page? <%= f.text_field "conditional_answer" %>
19
+ <br/>
20
+ Enter multiple answers separated by commas to match using an OR condition. Ex: "Option A, Option B" will match either "Option A" or "Option B" answers
21
+ </div>
22
+ <div class='future_target' style='display:none'>
23
+ Should it show the next element or a page further down the application?
24
+ <%= f.radio_button :conditional_type, "Fe::Element" %>
25
+ <%= f.label :conditional_type_feelement, "Next Element" %>
26
+ <%= f.radio_button :conditional_type, "Fe::Page" %>
27
+ <%= f.label :conditional_type_fepage, "Page" %>
28
+ </div>
29
+ <div class='future_page' style='<%= 'display:none' unless @element.conditional.is_a?(Fe::Page) %>'>
30
+ Which page? <%= f.collection_select :conditional_id, @page.question_sheet.pages, :id, :label %>
31
+ </div>
32
+ </div>
33
+ <br/>
34
+
8
35
  <p><label for="element_object" class="desc">Object Name</label>
9
36
  <%= f.text_field :object_name %></p>
10
37
 
@@ -13,4 +40,4 @@
13
40
 
14
41
  <p><label for="element_object" class="desc">Max Length</label>
15
42
  <%= f.text_field :max_length %></p>
16
- </div>
43
+ </div>