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
@@ -29,4 +29,15 @@ ul#event-list
|
|
29
29
|
margin-bottom: 3px
|
30
30
|
color: white
|
31
31
|
a:hover
|
32
|
-
text-decoration: none
|
32
|
+
text-decoration: none
|
33
|
+
|
34
|
+
.no-events-found
|
35
|
+
h3
|
36
|
+
text-align: center
|
37
|
+
|
38
|
+
.event-list-controls
|
39
|
+
.btn-group
|
40
|
+
margin-bottom: 0
|
41
|
+
|
42
|
+
form
|
43
|
+
margin-bottom: 0
|
@@ -6,11 +6,14 @@ class PdfGeneration
|
|
6
6
|
PDF_GET_URL = "http://quick-pdf.geminisbs.net/pdfs/:id.json?api_key=:key"
|
7
7
|
PDF_DOWNLOAD_URL = "http://quick-pdf.geminisbs.net/pdfs/:id/download?api_key=:key"
|
8
8
|
|
9
|
+
attr_accessor :pdf_options
|
10
|
+
|
9
11
|
def initialize(pdfable, pdf_api_key = PDF_API_KEY, http_party = HTTParty, sleeper = Kernel)
|
10
12
|
@pdfable = pdfable
|
11
13
|
@pdf_api_key = pdf_api_key
|
12
14
|
@http_party = http_party
|
13
15
|
@sleeper = sleeper
|
16
|
+
@pdf_options = {}
|
14
17
|
end
|
15
18
|
|
16
19
|
def generate
|
@@ -51,7 +54,7 @@ class PdfGeneration
|
|
51
54
|
:margin_bottom => "0.5in",
|
52
55
|
:margin_left => "0.5in",
|
53
56
|
:margin_right => "0.5in"
|
54
|
-
}
|
57
|
+
}.merge(pdf_options)
|
55
58
|
}
|
56
59
|
}
|
57
60
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class EventsController < ArtfullyOseController
|
2
|
-
respond_to :html, :json
|
2
|
+
respond_to :html, :json, :js
|
3
3
|
|
4
4
|
before_filter :find_event, :only => [ :show, :edit, :update, :destroy, :widget, :image, :storefront_link, :prices, :messages, :resell, :wp_plugin, :passes ]
|
5
5
|
before_filter :upcoming_shows, :only => :show
|
@@ -23,7 +23,16 @@ class EventsController < ArtfullyOseController
|
|
23
23
|
|
24
24
|
def index
|
25
25
|
authorize! :view, Event
|
26
|
-
|
26
|
+
|
27
|
+
scope = Event.unscoped.where(:deleted_at => nil).where(:organization_id => current_organization.id).includes(:shows).order('name ASC')
|
28
|
+
scope = if params[:range].present? && params[:range] == 'all'
|
29
|
+
@all = scope
|
30
|
+
else
|
31
|
+
@upcoming = scope.where :id => current_organization.shows.unplayed.pluck(:event_id).uniq
|
32
|
+
end
|
33
|
+
|
34
|
+
scope = scope.where('LOWER(name) LIKE ?', "%#{params[:query].downcase}%") unless params[:query].blank?
|
35
|
+
@events = scope
|
27
36
|
end
|
28
37
|
|
29
38
|
def show
|
@@ -25,6 +25,7 @@ class EventsPassTypesController < ArtfullyOseController
|
|
25
25
|
@events_pass_type = EventsPassType.new.tap do |ept|
|
26
26
|
ept.organization = current_organization
|
27
27
|
ept.event = @event
|
28
|
+
ept.limit_per_pass = params[:events_pass_type][:limit_per_pass]
|
28
29
|
ept.pass_type = current_organization.pass_types.find(params[:events_pass_type][:pass_type])
|
29
30
|
ept.ticket_types = Set.new(params[:events_pass_type][:ticket_types].reject!(&:blank?))
|
30
31
|
ept.excluded_shows = Set.new(params[:events_pass_type][:excluded_shows].reject!(&:blank?))
|
@@ -45,6 +46,7 @@ class EventsPassTypesController < ArtfullyOseController
|
|
45
46
|
|
46
47
|
def update
|
47
48
|
@events_pass_type = EventsPassType.find(params[:id])
|
49
|
+
@events_pass_type.limit_per_pass = params[:events_pass_type][:limit_per_pass]
|
48
50
|
@events_pass_type.ticket_types = Set.new(params[:events_pass_type][:ticket_types].reject!(&:blank?))
|
49
51
|
@events_pass_type.excluded_shows = Set.new(params[:events_pass_type][:excluded_shows].reject!(&:blank?))
|
50
52
|
@events_pass_type.active = params[:events_pass_type][:active]
|
@@ -5,7 +5,7 @@ class ExchangesController < ArtfullyOseController
|
|
5
5
|
@person = @order.person
|
6
6
|
|
7
7
|
if @items.all?(&:exchangeable?)
|
8
|
-
@events = current_organization.events
|
8
|
+
@events = current_organization.events.sort
|
9
9
|
|
10
10
|
unless params[:event_id].blank?
|
11
11
|
@event = Event.find(params[:event_id])
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class HouseholdsController < ArtfullyOseController
|
2
|
+
|
3
|
+
respond_to :html
|
4
|
+
|
5
|
+
def new
|
6
|
+
@household = Household.new
|
7
|
+
if params[:individuals]
|
8
|
+
params[:individuals].each do |i|
|
9
|
+
@household.individuals << current_organization.individuals.find(i)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
@household = current_organization.households.find(params[:id])
|
16
|
+
flash[:notice] = []
|
17
|
+
|
18
|
+
unless params[:individual_ids].nil?
|
19
|
+
@household.individuals << current_organization.individuals.find(params[:individual_ids])
|
20
|
+
end
|
21
|
+
|
22
|
+
@household.update_attributes(params[:household])
|
23
|
+
@household.update_member_addresses if @household.overwrite_member_addresses
|
24
|
+
|
25
|
+
if @household.save
|
26
|
+
flash[:notice] = "Your changes have been saved"
|
27
|
+
else
|
28
|
+
flash[:alert] = @household.errors.full_messages.to_sentence
|
29
|
+
end
|
30
|
+
|
31
|
+
redirect_to(@household)
|
32
|
+
end
|
33
|
+
|
34
|
+
def create
|
35
|
+
@household = current_organization.households.create(params[:household])
|
36
|
+
|
37
|
+
# NOTE: No mind is paid to any household these people might already be in
|
38
|
+
params[:individuals].reject(&:empty?).each do |i|
|
39
|
+
@household.individuals << current_organization.individuals.find(i)
|
40
|
+
end
|
41
|
+
|
42
|
+
if @household.save
|
43
|
+
redirect_to @household
|
44
|
+
else
|
45
|
+
render :new
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def show
|
50
|
+
@household = current_organization.households.find(params[:id])
|
51
|
+
@actions = @household.actions.includes(:person, :organization).paginate(:page => params[:page], :per_page => 20)
|
52
|
+
end
|
53
|
+
|
54
|
+
def index
|
55
|
+
@households = current_organization.households.order(:created_at)
|
56
|
+
@households = @households.paginate(:page => params[:page], :per_page => 20)
|
57
|
+
end
|
58
|
+
|
59
|
+
def suggested
|
60
|
+
hs = HouseholdSuggester.new(current_organization)
|
61
|
+
@by_address = hs.by_address
|
62
|
+
@by_spouse = hs.by_spouse
|
63
|
+
end
|
64
|
+
|
65
|
+
def ignore_suggested
|
66
|
+
suggested = SuggestedHousehold.find(params[:suggested_id])
|
67
|
+
suggested.update_attributes(:ignored => true)
|
68
|
+
redirect_to suggested_households_path
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class MemberCardsController < ArtfullyOseController
|
2
|
+
requires_kit :membership
|
3
|
+
|
4
|
+
before_filter :find_members
|
5
|
+
|
6
|
+
def new
|
7
|
+
generator = MemberCardGenerator::BlanksUsaIdc6.new(@members)
|
8
|
+
generator.generate
|
9
|
+
redirect_to generator.download_url
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def find_members
|
14
|
+
@members = if params[:search_id].present?
|
15
|
+
search = Search.where(:id => params[:search_id]).first
|
16
|
+
if search
|
17
|
+
load_members search.people.map { |person| person.memberships.current.first.member_id }
|
18
|
+
else
|
19
|
+
raise CanCan::AccessDenied
|
20
|
+
end
|
21
|
+
elsif params[:start].present?
|
22
|
+
members_from_sales_search
|
23
|
+
else
|
24
|
+
raise CanCan::AccessDenied
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_members(member_ids)
|
29
|
+
Member.find Array.wrap(member_ids).flatten
|
30
|
+
end
|
31
|
+
|
32
|
+
def members_from_sales_search
|
33
|
+
membership_type = MembershipType.find_by_id(params[:membership_type_id]) if params[:membership_type_id].present?
|
34
|
+
search = MembershipSaleSearch.new :start => params[:start],
|
35
|
+
:stop => params[:stop],
|
36
|
+
:organization => current_organization,
|
37
|
+
:membership_type => membership_type
|
38
|
+
|
39
|
+
load_members search.results.map { |order| order.items.select(&:membership?).first.product.member_id }
|
40
|
+
end
|
41
|
+
|
42
|
+
def sales_params?
|
43
|
+
params[:start].present?
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Members::SessionsController < Devise::SessionsController
|
2
|
+
layout 'devise_layout'
|
3
|
+
|
4
|
+
def new
|
5
|
+
# Store the referrer so we can send them back
|
6
|
+
# where they started after successful sign in.
|
7
|
+
session[:continue] = request.referrer
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def after_sign_in_path_for(resource_or_scope)
|
12
|
+
stored_location_for(resource_or_scope) || session.delete(:continue) || signed_in_root_path(resource_or_scope)
|
13
|
+
end
|
14
|
+
end
|
@@ -4,7 +4,7 @@ class MembershipCompsController < ArtfullyOseController
|
|
4
4
|
def new
|
5
5
|
@membership_types = current_organization.membership_types.all
|
6
6
|
@membership_types_hash = {}
|
7
|
-
@membership_types.each {|mt| @membership_types_hash[mt.id] = I18n.l(mt.ends_at, :format => :date_for_input)}
|
7
|
+
@membership_types.each {|mt| @membership_types_hash[mt.id] = {:allow_multiple_memberships => mt.allow_multiple_memberships?,:formatted_ends_at => I18n.l(mt.ends_at, :format => :date_for_input)}}
|
8
8
|
|
9
9
|
@membership_comp = MembershipComp.new
|
10
10
|
@membership_comp.membership_type ||= @membership_types.first
|
@@ -30,6 +30,11 @@ class MembershipCompsController < ArtfullyOseController
|
|
30
30
|
@membership_comp.award
|
31
31
|
render 'create' and return
|
32
32
|
else
|
33
|
+
unless params[:membership_comp][:membership_type].present?
|
34
|
+
flash[:error] = "Please select a membership type"
|
35
|
+
redirect_to :back and return
|
36
|
+
end
|
37
|
+
|
33
38
|
@number_without_emails = @membership_comp.people.select{ |person| person.email.blank? }.length
|
34
39
|
@number_of_companies = @membership_comp.people.select{ |person| person.company? }.length
|
35
40
|
@email_preview = generate_invitation_preview_for(@membership_comp)
|
@@ -58,7 +63,7 @@ class MembershipCompsController < ArtfullyOseController
|
|
58
63
|
def from_params(params)
|
59
64
|
membership_comp = MembershipComp.new
|
60
65
|
membership_comp_params = params[:membership_comp]
|
61
|
-
membership_comp.membership_type = MembershipType.find(membership_comp_params[:membership_type])
|
66
|
+
membership_comp.membership_type = MembershipType.find(membership_comp_params[:membership_type]) if membership_comp_params[:membership_type].present?
|
62
67
|
membership_comp.ends_at = membership_comp_params[:ends_at]
|
63
68
|
membership_comp.send_email = membership_comp_params[:send_email] == "true"
|
64
69
|
membership_comp.number_of_memberships = membership_comp_params[:number_of_memberships]
|
@@ -39,9 +39,14 @@ class MembershipTypesController < ArtfullyOseController
|
|
39
39
|
|
40
40
|
def update
|
41
41
|
@membership_type = MembershipType.find(params[:id])
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
|
43
|
+
if @membership_type.update_attributes(params[:membership_type])
|
44
|
+
flash[:notice] = "Your changes have been saved"
|
45
|
+
redirect_to membership_types_path
|
46
|
+
else
|
47
|
+
flash[:error] = @membership_type.errors.full_messages.to_sentence
|
48
|
+
render "edit" and return
|
49
|
+
end
|
45
50
|
end
|
46
51
|
|
47
52
|
private
|
@@ -30,7 +30,8 @@ class Mobile::OrdersController < ApplicationController
|
|
30
30
|
def index
|
31
31
|
organization = current_user.organizations.find(params[:organization_id])
|
32
32
|
show = organization.shows.find(params[:show_id])
|
33
|
-
|
33
|
+
door_list = DoorList.new(show)
|
34
|
+
orders = Order.find(door_list.items.collect(&:order_id).uniq)
|
34
35
|
render :json => orders, :each_serializer => OrderSerializer
|
35
36
|
end
|
36
37
|
|
@@ -55,6 +56,6 @@ class Mobile::OrdersController < ApplicationController
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
render :json => order, :serializer =>
|
59
|
+
render :json => order, :serializer => OrderValidationSerializer
|
59
60
|
end
|
60
61
|
end
|
@@ -18,6 +18,12 @@ class Mobile::ShowsController < ApplicationController
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
def show
|
22
|
+
organization = current_user.organizations.find(params[:organization_id])
|
23
|
+
show = organization.shows.find(params[:id])
|
24
|
+
render :json => show, :serializer => ShowSerializer
|
25
|
+
end
|
26
|
+
|
21
27
|
def index
|
22
28
|
organization = current_user.organizations.find(params[:organization_id])
|
23
29
|
event = organization.events.find(params[:event_id])
|
@@ -38,6 +38,24 @@ class Mobile::TicketsController < ApplicationController
|
|
38
38
|
}, :status => 400
|
39
39
|
end
|
40
40
|
|
41
|
+
rescue_from MemberWalkup::TicketTypeNotFound do |e|
|
42
|
+
error = {
|
43
|
+
:error => 'Could not find member only ticket type',
|
44
|
+
:reason => e.message,
|
45
|
+
:code => 9
|
46
|
+
}
|
47
|
+
render :json => error, :status => 404
|
48
|
+
end
|
49
|
+
|
50
|
+
rescue_from MemberWalkup::TicketsNotAvailable do |e|
|
51
|
+
error = {
|
52
|
+
:error => 'Could not find available tickets',
|
53
|
+
:reason => e.message,
|
54
|
+
:code => 10
|
55
|
+
}
|
56
|
+
render :json => error, :status => 404
|
57
|
+
end
|
58
|
+
|
41
59
|
def show
|
42
60
|
organization = current_user.organizations.find_by_id(params[:organization_id])
|
43
61
|
raise OrganizationNotFound, "Could not load ticket" if !organization
|
@@ -60,14 +78,25 @@ class Mobile::TicketsController < ApplicationController
|
|
60
78
|
def validate
|
61
79
|
organization = current_user.organizations.find_by_id(params[:organization_id])
|
62
80
|
raise OrganizationNotFound, "Could not update ticket" if !organization
|
81
|
+
|
63
82
|
ticket = organization.tickets.where(:show_id => params[:show_id], :uuid => params[:id]).first
|
64
|
-
|
83
|
+
if !ticket
|
84
|
+
# Try a member walkup
|
85
|
+
walkup = MemberWalkup.new(:show_id => params[:show_id], :member_uuid => params[:id])
|
86
|
+
|
87
|
+
if walkup.valid?
|
88
|
+
walkup.save
|
89
|
+
ticket = walkup.ticket
|
90
|
+
end
|
91
|
+
|
92
|
+
raise TicketNotFound, "Could not update ticket" unless ticket
|
93
|
+
end
|
65
94
|
|
66
95
|
if !ticket.validate_ticket!(current_user)
|
67
96
|
raise TicketAlreadyValidated
|
68
97
|
end
|
69
98
|
|
70
|
-
render :json => ticket.sold_item.try(:order), :serializer =>
|
99
|
+
render :json => ticket.sold_item.try(:order), :serializer => OrderValidationSerializer
|
71
100
|
end
|
72
101
|
|
73
102
|
def unvalidate
|
@@ -80,6 +109,6 @@ class Mobile::TicketsController < ApplicationController
|
|
80
109
|
raise TicketNotValidated
|
81
110
|
end
|
82
111
|
|
83
|
-
render :json => ticket.sold_item.try(:order), :serializer =>
|
112
|
+
render :json => ticket.sold_item.try(:order), :serializer => OrderValidationSerializer
|
84
113
|
end
|
85
114
|
end
|
@@ -1,25 +1,23 @@
|
|
1
1
|
class Mobile::UsersController < ApplicationController
|
2
2
|
skip_before_filter :authenticate_user!, :only => :sign_in
|
3
3
|
|
4
|
-
rescue_from ActiveRecord::RecordNotFound do
|
5
|
-
error = {
|
6
|
-
:error => "Could not sign in",
|
7
|
-
:reason => "Organization could not be found",
|
8
|
-
:code => 2
|
9
|
-
}
|
10
|
-
render :json => error, :status => 404
|
11
|
-
end
|
12
|
-
|
13
4
|
def sign_in
|
14
5
|
user = User.find_by_email(params[:email])
|
15
6
|
|
16
7
|
if user && user.valid_password?(params[:password])
|
17
|
-
|
18
|
-
|
19
|
-
|
8
|
+
|
9
|
+
if user.organizations.empty?
|
10
|
+
error = {
|
11
|
+
:error => "Could not sign in",
|
12
|
+
:reason => "User is not a member of any organizations",
|
13
|
+
:code => 2
|
14
|
+
}
|
15
|
+
render :json => error, :status => 422 and return
|
20
16
|
end
|
21
17
|
|
22
|
-
|
18
|
+
now = Time.parse(params[:now]) rescue Time.zone.now
|
19
|
+
|
20
|
+
render :json => user, :auth_token => true, :organization => user.organizations.first, :now => now
|
23
21
|
else
|
24
22
|
error = {
|
25
23
|
:error => "Could not sign in",
|
@@ -47,12 +47,54 @@ class OrdersController < ArtfullyOseController
|
|
47
47
|
redirect_to order_url(@order)
|
48
48
|
end
|
49
49
|
|
50
|
+
def membership
|
51
|
+
authorize! :view, Order
|
52
|
+
|
53
|
+
@organization = current_organization
|
54
|
+
@membership_type = MembershipType.find_by_id(params[:membership_type_id]) if params[:membership_type_id].present?
|
55
|
+
@membership_types = @organization.membership_types
|
56
|
+
|
57
|
+
request.format = :csv if params[:commit] == "Download"
|
58
|
+
|
59
|
+
search_terms = {
|
60
|
+
:start => params[:start],
|
61
|
+
:stop => params[:stop],
|
62
|
+
:organization => @organization,
|
63
|
+
:membership_type => @membership_type
|
64
|
+
}
|
65
|
+
|
66
|
+
@search = MembershipSaleSearch.new(search_terms) do |results|
|
67
|
+
results.paginate(:page => params[:page], :per_page => 25)
|
68
|
+
end
|
69
|
+
|
70
|
+
respond_to do |format|
|
71
|
+
format.html
|
72
|
+
format.csv do
|
73
|
+
filename = "Artfully-Membership-Sales-Export-#{DateTime.now.strftime("%m-%d-%y")}.csv"
|
74
|
+
items = ItemView.where(:product_type => "Membership")
|
75
|
+
.where('items_view.created_at > ? ', @search.start)
|
76
|
+
.where('items_view.created_at < ?', @search.stop)
|
77
|
+
.where('items_view.organization_id = ?', current_organization)
|
78
|
+
.order('items_view.created_at desc')
|
79
|
+
if @membership_type
|
80
|
+
items = items.joins(:item).
|
81
|
+
joins("INNER JOIN memberships ON (items.product_type = #{::Item.sanitize('Membership')} AND items.product_id = memberships.id)").
|
82
|
+
joins("INNER JOIN membership_types ON (membership_types.id = memberships.membership_type_id)").
|
83
|
+
where(:membership_types => {:id => @membership_type}).
|
84
|
+
group('items_view.order_id')
|
85
|
+
end
|
86
|
+
csv_string = items.all.to_comma(:membership_sale)
|
87
|
+
send_data csv_string, :filename => filename, :type => "text/csv", :disposition => "attachment"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
50
92
|
def sales
|
51
93
|
authorize! :view, Order
|
52
94
|
|
53
95
|
@organization = current_organization
|
54
96
|
@event = Event.find_by_id(params[:event_id]) if params[:event_id].present?
|
55
|
-
@events = @organization.events
|
97
|
+
@events = @organization.events.sort
|
56
98
|
@show = @event.shows.find_by_id(params[:show_id]) if @event && params[:show_id].present?
|
57
99
|
@shows = @event.shows if @event
|
58
100
|
request.format = :csv if params[:commit] == "Download"
|
@@ -74,7 +116,7 @@ class OrdersController < ArtfullyOseController
|
|
74
116
|
format.csv do
|
75
117
|
filename = "Artfully-Ticket-Sales-Export-#{DateTime.now.strftime("%m-%d-%y")}.csv"
|
76
118
|
items = ItemView.where(:product_type => "Ticket")
|
77
|
-
.where('created_at > ? ', search_terms[:start])
|
119
|
+
.where('created_at > ? ', search_terms[:start])
|
78
120
|
.where('created_at < ?', Sundial.midnightish(current_organization, search_terms[:stop]))
|
79
121
|
.where('organization_id = ?', current_organization)
|
80
122
|
.order('created_at desc')
|