artfully_ose 1.2.0.pre.23 → 1.2.0.pre.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (241) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/application.js +44 -11
  3. data/app/assets/javascripts/custom/inline-people-search.js +40 -40
  4. data/app/assets/javascripts/households.js +59 -0
  5. data/app/assets/javascripts/jquery-migrate-1.2.1.min.js +2 -0
  6. data/app/assets/javascripts/relationships.js +63 -0
  7. data/app/assets/stylesheets/application.sass +57 -10
  8. data/app/assets/stylesheets/sass/_event_list.sass +12 -1
  9. data/app/assets/stylesheets/sass/cart.sass +0 -6
  10. data/app/assets/stylesheets/storefront.css +1 -0
  11. data/app/concerns/pdf_generation.rb +4 -1
  12. data/app/controllers/events_controller.rb +11 -2
  13. data/app/controllers/events_pass_types_controller.rb +2 -0
  14. data/app/controllers/exchanges_controller.rb +1 -1
  15. data/app/controllers/households_controller.rb +71 -0
  16. data/app/controllers/member_cards_controller.rb +45 -0
  17. data/app/controllers/members/sessions_controller.rb +14 -0
  18. data/app/controllers/membership_comps_controller.rb +7 -2
  19. data/app/controllers/membership_types_controller.rb +8 -3
  20. data/app/controllers/mobile/orders_controller.rb +3 -2
  21. data/app/controllers/mobile/shows_controller.rb +6 -0
  22. data/app/controllers/mobile/tickets_controller.rb +32 -3
  23. data/app/controllers/mobile/users_controller.rb +11 -13
  24. data/app/controllers/orders_controller.rb +44 -2
  25. data/app/controllers/pass_types_controller.rb +11 -0
  26. data/app/controllers/passes_controller.rb +40 -1
  27. data/app/controllers/people_controller.rb +31 -15
  28. data/app/controllers/relationships_controller.rb +15 -0
  29. data/app/controllers/sales_controller.rb +12 -12
  30. data/app/controllers/searches_controller.rb +1 -1
  31. data/app/controllers/shows_controller.rb +10 -4
  32. data/app/controllers/slices_controller.rb +3 -2
  33. data/app/controllers/statements_controller.rb +1 -1
  34. data/app/controllers/store/memberships_controller.rb +5 -2
  35. data/app/controllers/store/orders_controller.rb +14 -13
  36. data/app/controllers/store/retrievals_controller.rb +29 -0
  37. data/app/helpers/artfully_ose_helper.rb +12 -4
  38. data/app/helpers/households_helper.rb +7 -0
  39. data/app/helpers/link_helper.rb +5 -5
  40. data/app/helpers/relationships_helper.rb +26 -0
  41. data/app/helpers/searches_helper.rb +13 -0
  42. data/app/helpers/suggested_households_helper.rb +5 -0
  43. data/app/mailers/pass_mailer.rb +17 -0
  44. data/app/models/ability.rb +1 -0
  45. data/app/models/actions/go_action.rb +3 -2
  46. data/app/models/address.rb +27 -13
  47. data/app/models/cart.rb +15 -0
  48. data/app/models/company.rb +1 -1
  49. data/app/models/database_views/item_view.rb +56 -13
  50. data/app/models/door_list.rb +6 -3
  51. data/app/models/event.rb +22 -1
  52. data/app/models/events_pass_type.rb +3 -1
  53. data/app/models/extendable.rb +6 -0
  54. data/app/models/household.rb +61 -0
  55. data/app/models/household_suggester.rb +58 -0
  56. data/app/models/imports/events_import.rb +10 -5
  57. data/app/models/individual.rb +3 -1
  58. data/app/models/item.rb +3 -1
  59. data/app/models/job/cleanup_suggested_households_job.rb +17 -0
  60. data/app/models/job/destroy_show_job.rb +10 -0
  61. data/app/models/job/geocode_address_job.rb +11 -0
  62. data/app/models/job/order_processor.rb +20 -8
  63. data/app/models/job/refund_order_processor.rb +16 -0
  64. data/app/models/kit.rb +1 -1
  65. data/app/models/kits/mailchimp_kit.rb +5 -3
  66. data/app/models/kits/membership_kit.rb +1 -1
  67. data/app/models/member.rb +19 -0
  68. data/app/models/member_card_generator.rb +63 -0
  69. data/app/models/member_walkup.rb +150 -0
  70. data/app/models/membership.rb +2 -5
  71. data/app/models/membership_comp.rb +1 -0
  72. data/app/models/membership_sale_search.rb +36 -0
  73. data/app/models/membership_type.rb +8 -2
  74. data/app/models/order.rb +32 -2
  75. data/app/models/order_handler.rb +58 -41
  76. data/app/models/orders/refund_order.rb +4 -0
  77. data/app/models/organization.rb +5 -0
  78. data/app/models/organization_ability.rb +1 -0
  79. data/app/models/pass.rb +143 -5
  80. data/app/models/pass_summary.rb +18 -0
  81. data/app/models/pass_type.rb +7 -1
  82. data/app/models/person.rb +83 -32
  83. data/app/models/relation.rb +27 -0
  84. data/app/models/relation_builder.rb +32 -0
  85. data/app/models/relationship.rb +55 -0
  86. data/app/models/relationship_builder.rb +12 -0
  87. data/app/models/relationship_validator.rb +46 -0
  88. data/app/models/relationships_kit.rb +31 -0
  89. data/app/models/search.rb +152 -57
  90. data/app/models/show.rb +38 -18
  91. data/app/models/slices.rb +25 -8
  92. data/app/models/statement.rb +32 -5
  93. data/app/models/suggested_household.rb +24 -0
  94. data/app/models/ticket.rb +1 -4
  95. data/app/models/ticket/locker.rb +2 -1
  96. data/app/models/ticket/pricing.rb +10 -1
  97. data/app/models/ticket_type.rb +12 -1
  98. data/app/models/valuation/lifetime_memberships.rb +24 -0
  99. data/app/models/valuation/lifetime_ticket_value.rb +1 -1
  100. data/app/models/venue.rb +21 -7
  101. data/app/views/actions/_form.html.haml +6 -6
  102. data/app/views/actions/get/_show.html.haml +1 -1
  103. data/app/views/actions/give/_show.html.haml +1 -1
  104. data/app/views/actions/shared/_show.html.haml +1 -1
  105. data/app/views/discounts/_discount_section_fields.html.haml +1 -1
  106. data/app/views/discounts/index.html.haml +1 -1
  107. data/app/views/events/_day_date_show.html.haml +2 -2
  108. data/app/views/events/_discount_section_fields.html.haml +1 -1
  109. data/app/views/events/_list.html.haml +10 -5
  110. data/app/views/events/_menu.html.haml +5 -5
  111. data/app/views/events/_section_fields.html.haml +1 -1
  112. data/app/views/events/_ticket_type_fields.html.haml +2 -2
  113. data/app/views/events/index.html.haml +20 -3
  114. data/app/views/events/temp_discount_form.html.haml +1 -1
  115. data/app/views/events/temp_discounts_index.html.haml +1 -1
  116. data/app/views/events_pass_types/_form.html.haml +17 -0
  117. data/app/views/events_pass_types/index.html.haml +5 -2
  118. data/app/views/exchanges/new.html.haml +1 -1
  119. data/app/views/households/_action.html.haml +24 -0
  120. data/app/views/households/_edit_modal.html.haml +143 -0
  121. data/app/views/households/_form.html.haml +26 -0
  122. data/app/views/households/_header.html.haml +25 -0
  123. data/app/views/households/_individual_fields.html.haml +8 -0
  124. data/app/views/households/_list.html.haml +10 -0
  125. data/app/views/households/_note.html.haml +33 -0
  126. data/app/views/households/edit.html.haml +1 -0
  127. data/app/views/households/index.html.haml +13 -0
  128. data/app/views/households/new.html.haml +14 -0
  129. data/app/views/households/show.html.haml +72 -0
  130. data/app/views/households/suggested.html.haml +38 -0
  131. data/app/views/imports/donations/_pending.html.haml +1 -1
  132. data/app/views/imports/events/_pending.html.haml +1 -1
  133. data/app/views/imports/people/_imported.html.haml +2 -2
  134. data/app/views/imports/people/_new.html.haml +3 -3
  135. data/app/views/imports/people/_pending.html.haml +2 -2
  136. data/app/views/imports/people/_recalled.html.haml +1 -1
  137. data/app/views/imports/shared/_sidebar.html.haml +1 -1
  138. data/app/views/index/dashboard.html.haml +4 -4
  139. data/app/views/layouts/_flash.html.haml +2 -2
  140. data/app/views/layouts/_menu.html.haml +2 -0
  141. data/app/views/layouts/storefront.html.haml +1 -1
  142. data/app/views/members/index/index.html.haml +1 -1
  143. data/app/views/membership_comps/confirm.html.haml +4 -3
  144. data/app/views/membership_comps/new.html.haml +21 -8
  145. data/app/views/membership_types/_form.html.haml +11 -0
  146. data/app/views/membership_types/index.html.haml +2 -2
  147. data/app/views/membership_types/type.html.haml +7 -4
  148. data/app/views/memberships/index.html.haml +7 -7
  149. data/app/views/merges/find_person.html.haml +1 -1
  150. data/app/views/notes/_note.html.haml +4 -4
  151. data/app/views/order_mailer/confirmation_for_refund.html.haml +8 -1
  152. data/app/views/orders/_item_table.haml +18 -5
  153. data/app/views/orders/_order_sidebar.html.haml +1 -1
  154. data/app/views/orders/membership.html.haml +104 -0
  155. data/app/views/orders/sales.html.haml +1 -1
  156. data/app/views/organizations/_form.html.haml +1 -1
  157. data/app/views/pass_mailer/pass_info_for.html.haml +21 -0
  158. data/app/views/pass_types/_form.html.haml +6 -0
  159. data/app/views/pass_types/_pass_type_fees.html.haml +0 -48
  160. data/app/views/pass_types/index.html.haml +4 -2
  161. data/app/views/passes/index.html.haml +95 -27
  162. data/app/views/pdfs/member_card_generator/blanks_usa_idc6.html.haml +109 -0
  163. data/app/views/people/_edit_modal.html.haml +35 -25
  164. data/app/views/people/_header.html.haml +10 -6
  165. data/app/views/people/_household_fields.html.haml +5 -0
  166. data/app/views/people/_phone_fields.html.haml +1 -1
  167. data/app/views/people/_relationship_fields.html.haml +14 -0
  168. data/app/views/people/_work_with_menu.html.haml +36 -0
  169. data/app/views/people/new.html.haml +1 -1
  170. data/app/views/people/show.html.haml +46 -8
  171. data/app/views/refunds/new.html.haml +4 -0
  172. data/app/views/relationships/index.html.haml +32 -0
  173. data/app/views/reports_mailer/daily.html.haml +41 -38
  174. data/app/views/sales/new.html.haml +1 -1
  175. data/app/views/searches/_form.html.haml +65 -17
  176. data/app/views/searches/_household.html.haml +7 -0
  177. data/app/views/searches/_person.html.haml +5 -2
  178. data/app/views/searches/new.html.haml +1 -1
  179. data/app/views/searches/show.html.haml +13 -5
  180. data/app/views/segments/show.html.haml +3 -3
  181. data/app/views/shared/_tags.html.haml +1 -1
  182. data/app/views/shows/_glance.html.haml +1 -1
  183. data/app/views/shows/_sections_table.html.haml +2 -2
  184. data/app/views/shows/_ticket_table.html.haml +1 -1
  185. data/app/views/shows/_work_with.html.haml +2 -2
  186. data/app/views/shows/door_list.html.haml +2 -2
  187. data/app/views/shows/door_list.pdf.haml +29 -0
  188. data/app/views/shows/index.html.haml +1 -1
  189. data/app/views/shows/show.html.haml +1 -1
  190. data/app/views/slices/index.html.haml +2 -1
  191. data/app/views/statements/_discounts_table.html.haml +1 -1
  192. data/app/views/statements/_order_location_table.html.haml +1 -1
  193. data/app/views/statements/_passes_table.html.haml +13 -16
  194. data/app/views/statements/_payment_method_table.haml +1 -1
  195. data/app/views/statements/_ticket_type_table.haml +5 -2
  196. data/app/views/statements/show.html.haml +2 -2
  197. data/app/views/store/checkouts/thanks.html.haml +3 -2
  198. data/app/views/store/events/index.html.haml +1 -1
  199. data/app/views/store/memberships/index.html.haml +9 -2
  200. data/app/views/store/orders/show.html.haml +10 -24
  201. data/app/views/store/passes/index.html.haml +1 -1
  202. data/app/views/store/retrievals/index.html.haml +11 -0
  203. data/app/views/store/shows/_show.html.haml +2 -2
  204. data/app/views/venues/edit.html.haml +3 -1
  205. data/config/routes.rb +21 -3
  206. data/db/migrate/20130916194547_add_relationships.rb +21 -0
  207. data/db/migrate/20131003134821_add_relationships_to_search.rb +7 -0
  208. data/db/migrate/20131003200508_add_starred_to_relationships.rb +5 -0
  209. data/db/migrate/20131015151550_add_households.rb +18 -0
  210. data/db/migrate/20131022183913_add_search_output_options.rb +24 -0
  211. data/db/migrate/20131025162155_default_search_filter_values.rb +10 -0
  212. data/db/migrate/20131025180139_unique_household_names.rb +8 -0
  213. data/db/migrate/20131106191847_add_suggested_households.rb +13 -0
  214. data/db/migrate/20131204162642_add_shared_address.rb +9 -0
  215. data/db/migrate/20131212164553_add_copy_to_individuals_option.rb +5 -0
  216. data/db/migrate/20140415212841_add_min_max_start_dates_to_searches.artfully_ose_engine.rb +6 -0
  217. data/db/migrate/20140422193345_add_email_copy_to_pass_type.rb +5 -0
  218. data/db/migrate/20140423181639_add_min_max_end_dates_to_searches.artfully_ose_engine.rb +6 -0
  219. data/db/migrate/20140423185921_add_cached_stats_to_event.rb +9 -0
  220. data/db/migrate/20140424174423_add_lifetime_memberships_to_people.artfully_ose_engine.rb +5 -0
  221. data/db/migrate/20140506155241_add_lpt_to_membership_type.rb +5 -0
  222. data/db/migrate/20140515143651_remove_show_stats_view.rb +6 -0
  223. data/db/migrate/20140521195853_add_deleted_at_to_pass_type.rb +5 -0
  224. data/db/migrate/20140522205554_add_limit_to_events_pass_types.rb +5 -0
  225. data/db/migrate/20140523180444_remove_tickets_purchased_from_passes.rb +5 -0
  226. data/lib/artfully_ose/common_abilities.rb +7 -1
  227. data/lib/artfully_ose/version.rb +1 -1
  228. data/spec/factories/household_factories.rb +8 -0
  229. data/spec/factories/organization_factories.rb +4 -0
  230. data/spec/factories/pass_type_factories.rb +11 -0
  231. data/spec/factories/user_factories.rb +1 -1
  232. metadata +92 -11
  233. data/app/assets/fonts/FontAwesome.otf +0 -0
  234. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  235. data/app/assets/fonts/fontawesome-webfont.svg +0 -284
  236. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  237. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  238. data/app/assets/stylesheets/font-awesome.sass +0 -759
  239. data/app/models/show_stats_view.rb +0 -10
  240. data/app/models/show_touch.rb +0 -12
  241. data/app/views/people/_comp_membership.html.haml +0 -23
@@ -33,6 +33,17 @@ class PassTypesController < ArtfullyOseController
33
33
  @pass_type = current_user.current_organization.pass_types.where(:id => params[:id]).first
34
34
  end
35
35
 
36
+ def destroy
37
+ @pass_type = current_user.current_organization.pass_types.where(:id => params[:id]).first
38
+ if @pass_type.destroyable?
39
+ @pass_type.destroy
40
+ flash[:notice] = "We've deleted this pass type"
41
+ else
42
+ flash[:error] = "Can't delete this pass type because you've sold some passes for this type."
43
+ end
44
+ redirect_to pass_types_path
45
+ end
46
+
36
47
  def update
37
48
  @pass_type = PassType.find(params[:id])
38
49
  @pass_type.update_attributes(params[:pass_type])
@@ -3,11 +3,50 @@ class PassesController < ArtfullyOseController
3
3
  before_filter :load_tags, :only => [:index]
4
4
 
5
5
  def index
6
- @passes = @person.passes.includes(:pass_type)
6
+ @passes = @person.passes.includes(:pass_type, :tickets).not_expired
7
+ @expired_passes = @person.passes.includes(:pass_type).expired
8
+ end
9
+
10
+ def bulk_update
11
+ @person = Person.find(params[:person_id])
12
+ authorize! :edit, @person
13
+ extend_passes(params)
14
+ redirect_to person_passes_path(@person)
15
+ end
16
+
17
+ def reminder
18
+ @person = Person.find(params[:person_id])
19
+ authorize! :edit, @person
20
+ @pass_ids = params['pass_ids']
21
+
22
+ if @pass_ids.blank?
23
+ flash[:error] = "Please select at least one pass to send a reminder for."
24
+ else
25
+ @passes = Pass.where(:organization_id => @person.organization.id)
26
+ .where(:id => params[:pass_ids])
27
+ .all
28
+ @person.delay.send_pass_summary_email(@passes)
29
+ flash[:notice] = "We'll get those pass codes out to #{@person} right away!"
30
+ end
31
+
32
+ redirect_to person_passes_path(@person)
7
33
  end
8
34
 
9
35
  private
10
36
  def find_person
11
37
  @person = current_organization.people.find(params[:person_id])
12
38
  end
39
+
40
+ def extend_passes(params)
41
+ if params[:commit].eql? "Change Expiration"
42
+ if params[:pass_ids].blank?
43
+ flash[:error] = "Please select at least one pass to send a reminder for."
44
+ else
45
+ params[:pass_ids].each do |pass_id|
46
+ Pass.find(pass_id).adjust_expiration_to(params[:ends_at])
47
+ end
48
+ flash[:notice] = "Passes have been adjusted."
49
+ end
50
+ end
51
+ end
13
52
  end
@@ -50,20 +50,17 @@ class PeopleController < ArtfullyOseController
50
50
  def update
51
51
  @person = Person.find(params[:id])
52
52
  authorize! :edit, @person
53
-
54
- #
55
- # The mailchimp form POSTS params as person[] regardless of individual or company
56
- #
57
- person_params = params.fetch((:person),{}).merge(params.fetch(:company, {})).merge(params.fetch(:individual,{}))
58
- results = @person.update_attributes(person_params)
53
+ flash[:notice] = []
54
+ results = @person.update_attributes(person_update_params)
55
+ @person.relationships.where(:inverse_id => nil).map(&:ensure_inverse)
59
56
 
60
57
  respond_to do |format|
61
58
  format.html do
62
59
  if results
63
60
  @person.create_subscribed_lists_notes!(current_user)
64
- flash[:notice] = "Your changes have been saved"
61
+ flash[:notice] << "Your changes have been saved"
65
62
  else
66
- errs = @person.errors.full_messages.to_sentence
63
+ errs = [@person.errors.delete(:"relationships.base")].flatten + [@person.errors.full_messages.to_sentence].flatten
67
64
  flash[:alert] = errs.blank? ? "Sorry, we couldn't save your changes. Make sure you entered a first name, last name or email address." : errs
68
65
  end
69
66
  redirect_to_person(@person, params)
@@ -87,13 +84,13 @@ class PeopleController < ArtfullyOseController
87
84
 
88
85
  if is_search(params)
89
86
  @people = Person.search_index(params[:search].dup, current_user.current_organization)
90
- @show_advanced_search_message = @people.length > 20
87
+ @show_advanced_search_message = @people.length > 20
91
88
  else
92
89
  @people = Person.recent(current_user.current_organization)
93
90
  end
94
91
 
95
92
  @people = @people.paginate(:page => params[:page], :per_page => 20)
96
-
93
+
97
94
  respond_with do |format|
98
95
  format.html { render :index }
99
96
  format.json { render :json => @people } #inline people search depends on json response
@@ -115,10 +112,15 @@ class PeopleController < ArtfullyOseController
115
112
  authorize! :edit, @person
116
113
 
117
114
  type = params[:type]
118
- starable = params[:type].classify.constantize.find(params[:action_id])
115
+ starable = type.classify.constantize.find(params[:action_id])
116
+
117
+ if type == 'relationship'
118
+ starable.starred ? starable.unstar! : starable.star!
119
+ else
120
+ starable.starred = ! starable.starred?
121
+ starable.save
122
+ end
119
123
 
120
- starable.starred = ! starable.starred?
121
- starable.save
122
124
  end
123
125
 
124
126
  def edit
@@ -173,8 +175,8 @@ class PeopleController < ArtfullyOseController
173
175
  private
174
176
  def is_search(params)
175
177
  params[:commit].present?
176
- end
177
-
178
+ end
179
+
178
180
  def without_winner
179
181
  if params[:winner]
180
182
  @winner = Person.find(params[:winner])
@@ -184,4 +186,18 @@ class PeopleController < ArtfullyOseController
184
186
  end
185
187
  end
186
188
 
189
+ def person_update_params
190
+ #
191
+ # The mailchimp form POSTS params as person[] regardless of individual or company
192
+ #
193
+ individual_params = params.fetch(:individual, {})
194
+ company_params = params.fetch(:company, {})
195
+
196
+ person_params = params.fetch((:person),{}).merge(company_params).merge(individual_params)
197
+
198
+ relationships_attributes = individual_params["relationships_attributes"] || company_params["relationships_attributes"] || {}
199
+ person_params["relationships_attributes"] = relationships_attributes.reject { |k,v| v["other_id"].empty? }
200
+
201
+ person_params
202
+ end
187
203
  end
@@ -0,0 +1,15 @@
1
+ class RelationshipsController < ArtfullyOseController
2
+
3
+ before_filter :load_tags
4
+
5
+ def index
6
+ @person = Person.find(params_person_id)
7
+
8
+ if params[:relation_id].present?
9
+ @relationships = @person.relationships.where(:relation_id => params[:relation_id].to_i)
10
+ else
11
+ @relationships = @person.relationships
12
+ end
13
+ end
14
+
15
+ end
@@ -30,21 +30,21 @@ class SalesController < ArtfullyOseController
30
30
  render :js => "window.location = '#{new_event_show_sales_path(@event, @show)}'"
31
31
  return
32
32
  end
33
-
33
+
34
34
  render :json => @sale.as_json
35
35
  .merge(:total => @sale.cart.total)
36
36
  .merge(:tickets_remaining => tickets_remaining)
37
- .merge(:door_list_rows => door_list_rows),
37
+ .merge(:door_list_rows => door_list_rows),
38
38
  :status => 200
39
39
  end
40
40
 
41
41
  def checking_out?
42
42
  !params[:commit].blank?
43
43
  end
44
-
44
+
45
45
  def door_list_rows
46
46
  door_list_rows = []
47
-
47
+
48
48
  @sale.tickets.each_with_index do |ticket, i|
49
49
  ticket.reload
50
50
  if ticket.sold? || ticket.comped?
@@ -71,7 +71,7 @@ class SalesController < ArtfullyOseController
71
71
  end
72
72
  remaining
73
73
  end
74
-
74
+
75
75
  def setup_defaults
76
76
  params[:anonymous] = true
77
77
  params[:cash] = true
@@ -108,13 +108,13 @@ class SalesController < ArtfullyOseController
108
108
 
109
109
  #if there's a person_id, use find
110
110
  @person = Person.find(params[:person][:id]) unless params[:person][:id].blank?
111
-
111
+
112
112
  if user_entered_nothing?
113
113
  @person = @dummy
114
114
  else
115
115
  @person = Person.first_or_create(person_attributes)
116
116
  end
117
-
117
+
118
118
  @person
119
119
  end
120
120
 
@@ -124,7 +124,7 @@ class SalesController < ArtfullyOseController
124
124
  :first_name => params[:person][:first_name],
125
125
  :last_name => params[:person][:last_name],
126
126
  :email => params[:person][:email],
127
- :organization => current_organization
127
+ :organization => current_organization
128
128
  }
129
129
  end
130
130
 
@@ -135,7 +135,7 @@ class SalesController < ArtfullyOseController
135
135
  params[:person][:email].blank?
136
136
  end
137
137
 
138
- def payment
138
+ def payment
139
139
  if Swiper.can_parse? params[:credit_card][:number]
140
140
  swiped_data = Swiper.parse(params[:credit_card][:number])
141
141
  params[:credit_card][:name] = swiped_data.track1.cardholder_name
@@ -143,14 +143,14 @@ class SalesController < ArtfullyOseController
143
143
  params[:credit_card][:month] = swiped_data.track1.expiration_month
144
144
  params[:credit_card][:year] = swiped_data.track1.expiration_year
145
145
  end
146
-
146
+
147
147
  params[:benefactor] = current_user
148
-
148
+
149
149
  payment = Payment.create(params[:payment_method], params)
150
150
  payment.customer = person
151
151
  payment
152
152
  end
153
-
153
+
154
154
  def has_card_info?
155
155
  params[:credit_card].present? and params[:credit_card][:card_number].present?
156
156
  end
@@ -29,7 +29,7 @@ class SearchesController < ApplicationController
29
29
  prepare_form
30
30
  prepare_people
31
31
  respond_to do |format|
32
- format.html { @people = @people.paginate(:page => params[:page], :per_page => 20) }
32
+ format.html { @people = @people.paginate(:page => params[:page], :per_page => (params[:per_page] || 20)) }
33
33
  format.csv { render :csv => Person.where(:id => @people.collect(&:id)).includes(:phones, :address, :tags).order('lower(people.last_name)'), :filename => "#{@search.id}-#{DateTime.now.strftime("%m-%d-%y")}" }
34
34
  end
35
35
  end
@@ -110,18 +110,19 @@ class ShowsController < ArtfullyOseController
110
110
  @show = Show.find(params[:id])
111
111
  authorize! :destroy, @show
112
112
 
113
- if @show.destroy
113
+ if @show.delayed_destroy
114
114
  respond_to do |format|
115
115
  format.html do |f|
116
- redirect_to event_shows_url(@show.event), :notice => 'Your show has been deleted.'
116
+ redirect_to event_shows_url(@show.event), :notice => 'Your show will be deleted in a few minutes.'
117
117
  end
118
118
  format.json { render :nothing => true, :status => 204 and return }
119
119
  end
120
120
  else
121
- render :status => :forbidden and return
121
+ flash[:error] = "Sorry, this show can not be deleted. Contact support for further help."
122
+ redirect_to show_path(@show)
122
123
  end
123
124
  end
124
-
125
+
125
126
  def door_list
126
127
  @show = Show.find(params[:id])
127
128
  @event = @show.event
@@ -137,6 +138,11 @@ class ShowsController < ArtfullyOseController
137
138
  @csv_string = @door_list.items.to_comma
138
139
  send_data @csv_string, :filename => @filename, :type => "text/csv", :disposition => "attachment"
139
140
  end
141
+
142
+ format.pdf do
143
+ pdf = render_to_string :pdf => "door_list.pdf.haml"
144
+ send_data pdf, :filename => @filename, :type => "application/pdf", :disposition => "attachment"
145
+ end
140
146
  end
141
147
  end
142
148
 
@@ -8,7 +8,8 @@ class SlicesController < ArtfullyOseController
8
8
  ["Payment Method", "payment_method_proc"],
9
9
  ["Ticket Type", "ticket_type_proc"],
10
10
  ["Discount", "discount_code_proc"],
11
- ["First time/Repeat", "first_time_buyer_proc"]
11
+ ["First time/Repeat", "first_time_buyer_proc"],
12
+ ["Validated", "validated_proc"]
12
13
  ]
13
14
  end
14
15
 
@@ -32,6 +33,6 @@ class SlicesController < ArtfullyOseController
32
33
  @show = Show.includes(:event, :tickets => [:items => :order]).find(params[:statement_id])
33
34
  @total_tickets = @show.tickets.select{|t| t.sold?}.size + @show.tickets.select{|t| t.comped?}.size
34
35
  authorize! :view, @show.event
35
- @items = Item.includes(:product, :order, :show => :event).where(:show_id => params[:statement_id])
36
+ @items = Item.includes({:product => :ticket_type}, :discount, :order, :show => :event).where(:show_id => params[:statement_id])
36
37
  end
37
38
  end
@@ -15,7 +15,7 @@ class StatementsController < ArtfullyOseController
15
15
  end
16
16
 
17
17
  def show
18
- @show = ::Show.includes(:event => :venue, :items => [:order, :discount, :product => :section]).find(params[:id])
18
+ @show = ::Show.includes(:event => :venue, :items => [:order, :discount, :product => :ticket_type, :pass => :pass_type]).find(params[:id])
19
19
  authorize! :view, @show
20
20
  @event = @show.event
21
21
  @shows = @event.shows.includes(:event => :venue)
@@ -1,13 +1,16 @@
1
1
  class Store::MembershipsController < Store::StoreController
2
2
  def show
3
- @membership_types = [MembershipType.find(params[:id])]
3
+ membership_type = MembershipType.sales_valid.find(params[:id])
4
+ @membership_types = [membership_type]
4
5
  @membership_kit = MembershipKit.where(:organization_id => store_organization.id).first
5
6
  render :index
7
+ rescue ActiveRecord::RecordNotFound
8
+ raise ActionController::RoutingError.new("Not Found")
6
9
  end
7
10
 
8
11
  def index
9
12
  render :nothing => true unless store_organization.can? :access, :membership
10
- @membership_types = store_organization.membership_types.storefront.order('price desc')
13
+ @membership_types = store_organization.membership_types.storefront.sales_valid.order('price desc')
11
14
  @membership_kit = MembershipKit.where(:organization_id => store_organization.id).first
12
15
  end
13
16
  end
@@ -8,8 +8,7 @@ class Store::OrdersController < Store::StoreController
8
8
  handler.handle_donation(params, @store_organization)
9
9
  handler.handle_memberships(params, current_member)
10
10
  handler.handle_passes(params)
11
- handler.handle_discount(params)
12
- handler.apply_pass(params)
11
+ handler.handle_discount_or_pass_code(params)
13
12
 
14
13
  flash[:alert] = handler.error unless handler.error.blank?
15
14
 
@@ -26,20 +25,22 @@ class Store::OrdersController < Store::StoreController
26
25
  end
27
26
  end
28
27
 
29
- if member_signed_in?
30
- params[:first_name] ||= current_member.person.first_name
31
- params[:last_name] ||= current_member.person.last_name
32
- params[:email] ||= current_member.person.email
33
- params[:phone] ||= current_member.person.phones.first.try(:number)
28
+ person = current_member.try(:person) || current_cart.applied_pass.try(:person)
29
+ if person.present?
30
+ params[:first_name] ||= person.first_name
31
+ params[:last_name] ||= person.last_name
32
+ params[:email] ||= person.email
33
+ params[:phone] ||= person.phones.first.try(:number)
34
34
 
35
35
  params[:address] ||= {}
36
- params[:address][:address1] = current_member.person.address.try(:address1)
37
- params[:address][:country] = current_member.person.address.try(:country)
38
- params[:address][:city] = current_member.person.address.try(:city)
39
- params[:address][:state] = current_member.person.address.try(:state)
40
- params[:address][:zip] = current_member.person.address.try(:zip)
41
-
36
+ params[:address][:address1] = person.address.try(:address1)
37
+ params[:address][:country] = person.address.try(:country)
38
+ params[:address][:city] = person.address.try(:city)
39
+ params[:address][:state] = person.address.try(:state)
40
+ params[:address][:zip] = person.address.try(:zip)
42
41
  end
42
+
43
+ @enter_code_string = (store_organization.can?(:access, :passes) ? "Use Discount or Pass Code" : "Use Discount Code")
43
44
  end
44
45
 
45
46
  def destroy
@@ -0,0 +1,29 @@
1
+ class Store::RetrievalsController < Store::StoreController
2
+ def index
3
+
4
+ end
5
+
6
+ def create
7
+ @person = @store_organization.people.where(:email => params[:email]).first
8
+
9
+ return fail if @person.nil?
10
+
11
+ @passes = Pass.where(:organization_id => @store_organization.id)
12
+ .where(:person_id => @person.id)
13
+ .not_expired
14
+ .all
15
+
16
+ return fail if @passes.empty?
17
+
18
+ @person.delay.send_pass_summary_email(@passes)
19
+
20
+ flash[:notice] = "Your reminder has been sent"
21
+ render "index"
22
+ end
23
+
24
+ private
25
+ def fail
26
+ flash[:error] = "We couldn't send a reminder email because we can't find your pass. If you think this is an error then please email us at #{@store_organization.email}"
27
+ render "index"
28
+ end
29
+ end
@@ -72,13 +72,13 @@ module ArtfullyOseHelper
72
72
  selected_object.try(:id) == menu_object.id ? "active" : "unselected"
73
73
  end
74
74
 
75
- #For use with Bootstraps icon %i classes
75
+ #For use with Font Awesome icon %i classes
76
76
  def icon_link_to(text, href, icon, class_names, id, html_attributes={})
77
77
  s = "<a href='#{href}' class='#{class_names}' id='#{id}' "
78
78
  html_attributes.each do |k,v|
79
79
  s = s + " #{k}=#{v} "
80
80
  end
81
- s = s + "><i class='#{icon}'></i> #{text}</a>"
81
+ s = s + "><i class='fa #{icon}'></i> #{text}</a>"
82
82
  s.html_safe
83
83
  end
84
84
 
@@ -221,7 +221,6 @@ module ArtfullyOseHelper
221
221
  options =
222
222
  [
223
223
  content_tag(:option, " --- All Events --- ", :value => ""),
224
- content_tag(:option, "", :value => ""),
225
224
  options_from_collection_for_select(events, :id, :name, default)
226
225
  ].join
227
226
 
@@ -232,7 +231,6 @@ module ArtfullyOseHelper
232
231
  options =
233
232
  [
234
233
  content_tag(:option, " --- All Shows --- ", :value => ""),
235
- content_tag(:option, "", :value => ""),
236
234
  shows.map do |show|
237
235
  selected = "selected" if show.id == default.to_i
238
236
  content_tag(:option, l(show.datetime_local_to_event), :value => show.id, :selected => selected)
@@ -241,6 +239,16 @@ module ArtfullyOseHelper
241
239
 
242
240
  select_tag show_id, raw(options), :class => "span3"
243
241
  end
242
+
243
+ def select_membership_type_for_sales_search(membership_types, membership_type_id, default)
244
+ options =
245
+ [
246
+ content_tag(:option, " --- All Membership Types --- ", :value => ""),
247
+ options_from_collection_for_select(membership_types, :id, :name, default)
248
+ ].join
249
+
250
+ select_tag membership_type_id, raw(options), :class => "span3"
251
+ end
244
252
 
245
253
  def nav_dropdown(text, link='#')
246
254
  link_to ERB::Util.html_escape(text) + ' <b class="caret"></b>'.html_safe, link, :class => 'dropdown-toggle', 'data-toggle' => 'dropdown'