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.
- checksums.yaml +8 -8
- data/app/assets/javascripts/application.js +44 -11
- data/app/assets/javascripts/custom/inline-people-search.js +40 -40
- data/app/assets/javascripts/households.js +59 -0
- data/app/assets/javascripts/jquery-migrate-1.2.1.min.js +2 -0
- data/app/assets/javascripts/relationships.js +63 -0
- data/app/assets/stylesheets/application.sass +57 -10
- data/app/assets/stylesheets/sass/_event_list.sass +12 -1
- data/app/assets/stylesheets/sass/cart.sass +0 -6
- data/app/assets/stylesheets/storefront.css +1 -0
- data/app/concerns/pdf_generation.rb +4 -1
- data/app/controllers/events_controller.rb +11 -2
- data/app/controllers/events_pass_types_controller.rb +2 -0
- data/app/controllers/exchanges_controller.rb +1 -1
- data/app/controllers/households_controller.rb +71 -0
- data/app/controllers/member_cards_controller.rb +45 -0
- data/app/controllers/members/sessions_controller.rb +14 -0
- data/app/controllers/membership_comps_controller.rb +7 -2
- data/app/controllers/membership_types_controller.rb +8 -3
- data/app/controllers/mobile/orders_controller.rb +3 -2
- data/app/controllers/mobile/shows_controller.rb +6 -0
- data/app/controllers/mobile/tickets_controller.rb +32 -3
- data/app/controllers/mobile/users_controller.rb +11 -13
- data/app/controllers/orders_controller.rb +44 -2
- data/app/controllers/pass_types_controller.rb +11 -0
- data/app/controllers/passes_controller.rb +40 -1
- data/app/controllers/people_controller.rb +31 -15
- data/app/controllers/relationships_controller.rb +15 -0
- data/app/controllers/sales_controller.rb +12 -12
- data/app/controllers/searches_controller.rb +1 -1
- data/app/controllers/shows_controller.rb +10 -4
- data/app/controllers/slices_controller.rb +3 -2
- data/app/controllers/statements_controller.rb +1 -1
- data/app/controllers/store/memberships_controller.rb +5 -2
- data/app/controllers/store/orders_controller.rb +14 -13
- data/app/controllers/store/retrievals_controller.rb +29 -0
- data/app/helpers/artfully_ose_helper.rb +12 -4
- data/app/helpers/households_helper.rb +7 -0
- data/app/helpers/link_helper.rb +5 -5
- data/app/helpers/relationships_helper.rb +26 -0
- data/app/helpers/searches_helper.rb +13 -0
- data/app/helpers/suggested_households_helper.rb +5 -0
- data/app/mailers/pass_mailer.rb +17 -0
- data/app/models/ability.rb +1 -0
- data/app/models/actions/go_action.rb +3 -2
- data/app/models/address.rb +27 -13
- data/app/models/cart.rb +15 -0
- data/app/models/company.rb +1 -1
- data/app/models/database_views/item_view.rb +56 -13
- data/app/models/door_list.rb +6 -3
- data/app/models/event.rb +22 -1
- data/app/models/events_pass_type.rb +3 -1
- data/app/models/extendable.rb +6 -0
- data/app/models/household.rb +61 -0
- data/app/models/household_suggester.rb +58 -0
- data/app/models/imports/events_import.rb +10 -5
- data/app/models/individual.rb +3 -1
- data/app/models/item.rb +3 -1
- data/app/models/job/cleanup_suggested_households_job.rb +17 -0
- data/app/models/job/destroy_show_job.rb +10 -0
- data/app/models/job/geocode_address_job.rb +11 -0
- data/app/models/job/order_processor.rb +20 -8
- data/app/models/job/refund_order_processor.rb +16 -0
- data/app/models/kit.rb +1 -1
- data/app/models/kits/mailchimp_kit.rb +5 -3
- data/app/models/kits/membership_kit.rb +1 -1
- data/app/models/member.rb +19 -0
- data/app/models/member_card_generator.rb +63 -0
- data/app/models/member_walkup.rb +150 -0
- data/app/models/membership.rb +2 -5
- data/app/models/membership_comp.rb +1 -0
- data/app/models/membership_sale_search.rb +36 -0
- data/app/models/membership_type.rb +8 -2
- data/app/models/order.rb +32 -2
- data/app/models/order_handler.rb +58 -41
- data/app/models/orders/refund_order.rb +4 -0
- data/app/models/organization.rb +5 -0
- data/app/models/organization_ability.rb +1 -0
- data/app/models/pass.rb +143 -5
- data/app/models/pass_summary.rb +18 -0
- data/app/models/pass_type.rb +7 -1
- data/app/models/person.rb +83 -32
- data/app/models/relation.rb +27 -0
- data/app/models/relation_builder.rb +32 -0
- data/app/models/relationship.rb +55 -0
- data/app/models/relationship_builder.rb +12 -0
- data/app/models/relationship_validator.rb +46 -0
- data/app/models/relationships_kit.rb +31 -0
- data/app/models/search.rb +152 -57
- data/app/models/show.rb +38 -18
- data/app/models/slices.rb +25 -8
- data/app/models/statement.rb +32 -5
- data/app/models/suggested_household.rb +24 -0
- data/app/models/ticket.rb +1 -4
- data/app/models/ticket/locker.rb +2 -1
- data/app/models/ticket/pricing.rb +10 -1
- data/app/models/ticket_type.rb +12 -1
- data/app/models/valuation/lifetime_memberships.rb +24 -0
- data/app/models/valuation/lifetime_ticket_value.rb +1 -1
- data/app/models/venue.rb +21 -7
- data/app/views/actions/_form.html.haml +6 -6
- data/app/views/actions/get/_show.html.haml +1 -1
- data/app/views/actions/give/_show.html.haml +1 -1
- data/app/views/actions/shared/_show.html.haml +1 -1
- data/app/views/discounts/_discount_section_fields.html.haml +1 -1
- data/app/views/discounts/index.html.haml +1 -1
- data/app/views/events/_day_date_show.html.haml +2 -2
- data/app/views/events/_discount_section_fields.html.haml +1 -1
- data/app/views/events/_list.html.haml +10 -5
- data/app/views/events/_menu.html.haml +5 -5
- data/app/views/events/_section_fields.html.haml +1 -1
- data/app/views/events/_ticket_type_fields.html.haml +2 -2
- data/app/views/events/index.html.haml +20 -3
- data/app/views/events/temp_discount_form.html.haml +1 -1
- data/app/views/events/temp_discounts_index.html.haml +1 -1
- data/app/views/events_pass_types/_form.html.haml +17 -0
- data/app/views/events_pass_types/index.html.haml +5 -2
- data/app/views/exchanges/new.html.haml +1 -1
- data/app/views/households/_action.html.haml +24 -0
- data/app/views/households/_edit_modal.html.haml +143 -0
- data/app/views/households/_form.html.haml +26 -0
- data/app/views/households/_header.html.haml +25 -0
- data/app/views/households/_individual_fields.html.haml +8 -0
- data/app/views/households/_list.html.haml +10 -0
- data/app/views/households/_note.html.haml +33 -0
- data/app/views/households/edit.html.haml +1 -0
- data/app/views/households/index.html.haml +13 -0
- data/app/views/households/new.html.haml +14 -0
- data/app/views/households/show.html.haml +72 -0
- data/app/views/households/suggested.html.haml +38 -0
- data/app/views/imports/donations/_pending.html.haml +1 -1
- data/app/views/imports/events/_pending.html.haml +1 -1
- data/app/views/imports/people/_imported.html.haml +2 -2
- data/app/views/imports/people/_new.html.haml +3 -3
- data/app/views/imports/people/_pending.html.haml +2 -2
- data/app/views/imports/people/_recalled.html.haml +1 -1
- data/app/views/imports/shared/_sidebar.html.haml +1 -1
- data/app/views/index/dashboard.html.haml +4 -4
- data/app/views/layouts/_flash.html.haml +2 -2
- data/app/views/layouts/_menu.html.haml +2 -0
- data/app/views/layouts/storefront.html.haml +1 -1
- data/app/views/members/index/index.html.haml +1 -1
- data/app/views/membership_comps/confirm.html.haml +4 -3
- data/app/views/membership_comps/new.html.haml +21 -8
- data/app/views/membership_types/_form.html.haml +11 -0
- data/app/views/membership_types/index.html.haml +2 -2
- data/app/views/membership_types/type.html.haml +7 -4
- data/app/views/memberships/index.html.haml +7 -7
- data/app/views/merges/find_person.html.haml +1 -1
- data/app/views/notes/_note.html.haml +4 -4
- data/app/views/order_mailer/confirmation_for_refund.html.haml +8 -1
- data/app/views/orders/_item_table.haml +18 -5
- data/app/views/orders/_order_sidebar.html.haml +1 -1
- data/app/views/orders/membership.html.haml +104 -0
- data/app/views/orders/sales.html.haml +1 -1
- data/app/views/organizations/_form.html.haml +1 -1
- data/app/views/pass_mailer/pass_info_for.html.haml +21 -0
- data/app/views/pass_types/_form.html.haml +6 -0
- data/app/views/pass_types/_pass_type_fees.html.haml +0 -48
- data/app/views/pass_types/index.html.haml +4 -2
- data/app/views/passes/index.html.haml +95 -27
- data/app/views/pdfs/member_card_generator/blanks_usa_idc6.html.haml +109 -0
- data/app/views/people/_edit_modal.html.haml +35 -25
- data/app/views/people/_header.html.haml +10 -6
- data/app/views/people/_household_fields.html.haml +5 -0
- data/app/views/people/_phone_fields.html.haml +1 -1
- data/app/views/people/_relationship_fields.html.haml +14 -0
- data/app/views/people/_work_with_menu.html.haml +36 -0
- data/app/views/people/new.html.haml +1 -1
- data/app/views/people/show.html.haml +46 -8
- data/app/views/refunds/new.html.haml +4 -0
- data/app/views/relationships/index.html.haml +32 -0
- data/app/views/reports_mailer/daily.html.haml +41 -38
- data/app/views/sales/new.html.haml +1 -1
- data/app/views/searches/_form.html.haml +65 -17
- data/app/views/searches/_household.html.haml +7 -0
- data/app/views/searches/_person.html.haml +5 -2
- data/app/views/searches/new.html.haml +1 -1
- data/app/views/searches/show.html.haml +13 -5
- data/app/views/segments/show.html.haml +3 -3
- data/app/views/shared/_tags.html.haml +1 -1
- data/app/views/shows/_glance.html.haml +1 -1
- data/app/views/shows/_sections_table.html.haml +2 -2
- data/app/views/shows/_ticket_table.html.haml +1 -1
- data/app/views/shows/_work_with.html.haml +2 -2
- data/app/views/shows/door_list.html.haml +2 -2
- data/app/views/shows/door_list.pdf.haml +29 -0
- data/app/views/shows/index.html.haml +1 -1
- data/app/views/shows/show.html.haml +1 -1
- data/app/views/slices/index.html.haml +2 -1
- data/app/views/statements/_discounts_table.html.haml +1 -1
- data/app/views/statements/_order_location_table.html.haml +1 -1
- data/app/views/statements/_passes_table.html.haml +13 -16
- data/app/views/statements/_payment_method_table.haml +1 -1
- data/app/views/statements/_ticket_type_table.haml +5 -2
- data/app/views/statements/show.html.haml +2 -2
- data/app/views/store/checkouts/thanks.html.haml +3 -2
- data/app/views/store/events/index.html.haml +1 -1
- data/app/views/store/memberships/index.html.haml +9 -2
- data/app/views/store/orders/show.html.haml +10 -24
- data/app/views/store/passes/index.html.haml +1 -1
- data/app/views/store/retrievals/index.html.haml +11 -0
- data/app/views/store/shows/_show.html.haml +2 -2
- data/app/views/venues/edit.html.haml +3 -1
- data/config/routes.rb +21 -3
- data/db/migrate/20130916194547_add_relationships.rb +21 -0
- data/db/migrate/20131003134821_add_relationships_to_search.rb +7 -0
- data/db/migrate/20131003200508_add_starred_to_relationships.rb +5 -0
- data/db/migrate/20131015151550_add_households.rb +18 -0
- data/db/migrate/20131022183913_add_search_output_options.rb +24 -0
- data/db/migrate/20131025162155_default_search_filter_values.rb +10 -0
- data/db/migrate/20131025180139_unique_household_names.rb +8 -0
- data/db/migrate/20131106191847_add_suggested_households.rb +13 -0
- data/db/migrate/20131204162642_add_shared_address.rb +9 -0
- data/db/migrate/20131212164553_add_copy_to_individuals_option.rb +5 -0
- data/db/migrate/20140415212841_add_min_max_start_dates_to_searches.artfully_ose_engine.rb +6 -0
- data/db/migrate/20140422193345_add_email_copy_to_pass_type.rb +5 -0
- data/db/migrate/20140423181639_add_min_max_end_dates_to_searches.artfully_ose_engine.rb +6 -0
- data/db/migrate/20140423185921_add_cached_stats_to_event.rb +9 -0
- data/db/migrate/20140424174423_add_lifetime_memberships_to_people.artfully_ose_engine.rb +5 -0
- data/db/migrate/20140506155241_add_lpt_to_membership_type.rb +5 -0
- data/db/migrate/20140515143651_remove_show_stats_view.rb +6 -0
- data/db/migrate/20140521195853_add_deleted_at_to_pass_type.rb +5 -0
- data/db/migrate/20140522205554_add_limit_to_events_pass_types.rb +5 -0
- data/db/migrate/20140523180444_remove_tickets_purchased_from_passes.rb +5 -0
- data/lib/artfully_ose/common_abilities.rb +7 -1
- data/lib/artfully_ose/version.rb +1 -1
- data/spec/factories/household_factories.rb +8 -0
- data/spec/factories/organization_factories.rb +4 -0
- data/spec/factories/pass_type_factories.rb +11 -0
- data/spec/factories/user_factories.rb +1 -1
- metadata +92 -11
- data/app/assets/fonts/FontAwesome.otf +0 -0
- data/app/assets/fonts/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/fontawesome-webfont.svg +0 -284
- data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/fontawesome-webfont.woff +0 -0
- data/app/assets/stylesheets/font-awesome.sass +0 -759
- data/app/models/show_stats_view.rb +0 -10
- data/app/models/show_touch.rb +0 -12
- 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
|
-
|
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]
|
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 =
|
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.
|
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
|
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
|
-
|
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 => :
|
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
|
-
|
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.
|
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
|
-
|
30
|
-
|
31
|
-
params[:
|
32
|
-
params[:
|
33
|
-
params[:
|
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] =
|
37
|
-
params[:address][:country] =
|
38
|
-
params[:address][:city] =
|
39
|
-
params[:address][:state] =
|
40
|
-
params[:address][: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
|
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'
|