artfully_ose 1.3.0.pre3 → 1.3.0.pre4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/loading-white.gif +0 -0
- data/app/assets/images/seating_temp/1.jpg +0 -0
- data/app/assets/images/seating_temp/10.jpg +0 -0
- data/app/assets/images/seating_temp/11.jpg +0 -0
- data/app/assets/images/seating_temp/2.jpg +0 -0
- data/app/assets/images/seating_temp/3.jpg +0 -0
- data/app/assets/images/seating_temp/4.jpg +0 -0
- data/app/assets/images/seating_temp/5.jpg +0 -0
- data/app/assets/images/seating_temp/6.jpg +0 -0
- data/app/assets/images/seating_temp/7.jpg +0 -0
- data/app/assets/images/seating_temp/8.jpg +0 -0
- data/app/assets/images/seating_temp/9.jpg +0 -0
- data/app/assets/images/seating_temp/icon_43405.png +0 -0
- data/app/assets/images/seating_temp/icon_43405.svg +3 -0
- data/app/assets/images/seating_temp/icon_43405_plus.png +0 -0
- data/app/assets/images/seating_temp/license.txt +8 -0
- data/app/assets/javascripts/application.js +1 -0
- data/app/assets/javascripts/custom/cookies.js +27 -0
- data/app/assets/javascripts/custom/inline-people-search.js +4 -0
- data/app/assets/javascripts/custom/job-monitor.js +0 -1
- data/app/assets/javascripts/exchange-seat-chart.js +5 -0
- data/app/assets/javascripts/seat-chart.js +606 -0
- data/app/assets/javascripts/show-seat-chart.js +17 -0
- data/app/assets/javascripts/store/store-seat-chart.js +76 -0
- data/app/assets/javascripts/store/store.js +14 -39
- data/app/assets/stylesheets/application.sass +49 -1
- data/app/assets/stylesheets/bootstrap-overrides.css +11 -3
- data/app/assets/stylesheets/sass/seat-chart.sass +311 -0
- data/app/assets/stylesheets/sass/store.sass +73 -19
- data/app/assets/stylesheets/storefront.css +2 -0
- data/app/concerns/pdf_generation.rb +1 -15
- data/app/controllers/advanced_searches_controller.rb +1 -3
- data/app/controllers/charts_controller.rb +14 -12
- data/app/controllers/console_sales_controller.rb +55 -0
- data/app/controllers/event_calendars_controller.rb +15 -0
- data/app/controllers/events_controller.rb +16 -5
- data/app/controllers/exchanges_controller.rb +32 -9
- data/app/controllers/export_controller.rb +8 -0
- data/app/controllers/members/sessions_controller.rb +0 -2
- data/app/controllers/membership_comps_controller.rb +2 -1
- data/app/controllers/prices_controller.rb +20 -0
- data/app/controllers/shows_controller.rb +3 -1
- data/app/controllers/store/events_controller.rb +6 -5
- data/app/controllers/store/orders_controller.rb +11 -13
- data/app/controllers/store/shows_controller.rb +1 -0
- data/app/controllers/store/store_controller.rb +11 -0
- data/app/controllers/tickets_controller.rb +0 -28
- data/app/controllers/user_memberships_controller.rb +7 -2
- data/app/controllers/venues_controller.rb +9 -0
- data/app/helpers/artfully_ose_helper.rb +18 -4
- data/app/helpers/seating_helper.rb +157 -0
- data/app/models/assigned_chart.rb +220 -0
- data/app/models/cart.rb +6 -1
- data/app/models/chart.rb +28 -17
- data/app/models/database_views/item_view.rb +76 -5
- data/app/models/discount.rb +4 -0
- data/app/models/discounts/buy_one_get_one_free_discount_type.rb +1 -1
- data/app/models/discounts/dollars_off_tickets_discount_type.rb +5 -1
- data/app/models/discounts/percentage_off_tickets_discount_type.rb +8 -4
- data/app/models/event.rb +86 -12
- data/app/models/general_admission_chart.rb +51 -0
- data/app/models/imports/events_import.rb +1 -1
- data/app/models/job/show_creator.rb +3 -10
- data/app/models/kit.rb +11 -1
- data/app/models/kits/assigned_seating_kit.rb +23 -0
- data/app/models/member_walkup.rb +1 -1
- data/app/models/order_handler.rb +22 -6
- data/app/models/organization.rb +4 -5
- data/app/models/person.rb +3 -1
- data/app/models/sale.rb +1 -1
- data/app/models/seat.rb +96 -0
- data/app/models/section.rb +1 -3
- data/app/models/show.rb +10 -17
- data/app/models/ticket.rb +30 -6
- data/app/models/ticket/locker.rb +3 -2
- data/app/models/ticket_type.rb +12 -6
- data/app/models/ticket_types_seat.rb +4 -0
- data/app/models/venue.rb +23 -0
- data/app/views/advanced_searches/filters/_birthday.html.haml +1 -0
- data/app/views/assigned_charts/_show.html.haml +12 -0
- data/app/views/console_sales/_aloha.html.haml +5 -4
- data/app/views/console_sales/new.html.haml +9 -0
- data/app/views/event_calendars/index.html.haml +34 -0
- data/app/views/events/_menu.html.haml +2 -1
- data/app/views/events/_section_fields.html.haml +13 -8
- data/app/views/events/new.html.haml +34 -4
- data/app/views/events/prices.html.haml +3 -4
- data/app/views/events/seating.html.haml +131 -0
- data/app/views/exchanges/_assigned_chart.html.haml +108 -0
- data/app/views/exchanges/_general_admission_chart.html.haml +55 -0
- data/app/views/exchanges/new.html.haml +1 -55
- data/app/views/general_admission_charts/_show.html.haml +2 -0
- data/app/views/layouts/_menu.html.haml +44 -31
- data/app/views/layouts/storefront.html.haml +72 -30
- data/app/views/membership_comps/new.html.haml +1 -0
- data/app/views/order_mailer/confirmation_for.html.haml +5 -3
- data/app/views/order_mailer/confirmation_for.text.haml +1 -2
- data/app/views/pdfs/order.html.haml +20 -6
- data/app/views/seating/_actions_menu.html.haml +10 -0
- data/app/views/seating/_chart.html.haml +15 -0
- data/app/views/seating/_chart_container.html.haml +2 -0
- data/app/views/seating/_chart_note_display.html.haml +7 -0
- data/app/views/seating/_hold_seats_modal.html.haml +39 -0
- data/app/views/seating/_layer_menu.html.haml +23 -0
- data/app/views/seating/_legend.html.haml +52 -0
- data/app/views/seating/_modify_seats_modal.html.haml +29 -0
- data/app/views/seating/_ticket_type_modals.html.haml +41 -0
- data/app/views/shows/_seat_chart.html.haml +122 -0
- data/app/views/shows/_sections_table.html.haml +3 -24
- data/app/views/shows/_ticket_table.html.haml +4 -2
- data/app/views/shows/_work_with.html.haml +4 -0
- data/app/views/shows/new.html.haml +2 -2
- data/app/views/shows/show.html.haml +93 -14
- data/app/views/store/assigned_charts/_show.html.haml +54 -0
- data/app/views/store/checkouts/shopping_cart_display/_tickets.haml +13 -0
- data/app/views/store/donations/index.html.haml +1 -1
- data/app/views/store/events/calendar.html.haml +94 -11
- data/app/views/store/events/index.html.haml +1 -1
- data/app/views/store/events/show.html.haml +36 -2
- data/app/views/store/events/single_show.html.haml +5 -4
- data/app/views/store/general_admission_charts/_show.html.haml +41 -0
- data/app/views/store/orders/show.html.haml +17 -4
- data/app/views/store/shared/_donate_form.html.haml +2 -1
- data/app/views/store/shared/_small_donate_form.html.haml +1 -1
- data/app/views/store/shows/_show.html.haml +1 -39
- data/app/views/ticket_types/edit.html.haml +1 -1
- data/app/views/user_memberships/_list.html.haml +1 -1
- data/app/views/venues/edit.html.haml +1 -1
- data/app/views/venues/show.html.haml +11 -0
- data/config/routes.rb +27 -10
- data/db/migrate/20140828174357_add_type_to_chart.rb +7 -0
- data/db/migrate/20140828195617_create_seats.rb +16 -0
- data/db/migrate/20140829135426_add_venue_to_chart.rb +5 -0
- data/db/migrate/20140829143520_add_assigned_to_event.rb +5 -0
- data/db/migrate/20140904164927_add_fields_to_seat.rb +14 -0
- data/db/migrate/20140912170010_add_note_to_seat.rb +6 -0
- data/db/migrate/20140919152307_add_seats_to_ticket.rb +5 -0
- data/db/migrate/20140930224543_add_public_note_to_chart.rb +5 -0
- data/db/migrate/20141001140737_add_seat_id_index_to_tickets.rb +5 -0
- data/db/migrate/20141001193242_associate_hold_with_person.rb +6 -0
- data/db/migrate/20141021175311_create_ticket_types_seats.rb +11 -0
- data/db/migrate/20150106161744_migrate_charts_back_to_venues.rb +18 -0
- data/db/migrate/20151105085424_add_creator_to_items_view.rb +40 -0
- data/lib/artfully_ose/version.rb +1 -1
- data/spec/factories/assigned_chart_factories.rb +18 -0
- data/spec/factories/chart_factories.rb +4 -8
- data/spec/factories/kit_factories.rb +4 -0
- data/spec/factories/seat_factories.rb +4 -0
- data/spec/factories/show_factories.rb +1 -1
- metadata +66 -5
- data/app/models/ticket/foundry.rb +0 -48
- data/app/models/ticket/template.rb +0 -40
- data/app/views/store/events/_calendar.html.haml +0 -13
@@ -1,6 +1,5 @@
|
|
1
1
|
@import "colors"
|
2
2
|
@import "mixins"
|
3
|
-
@import url(https://fonts.googleapis.com/css?family=Roboto:400,100,300)
|
4
3
|
|
5
4
|
body
|
6
5
|
padding-top: 10px
|
@@ -150,7 +149,7 @@ ul#shows, ul#memberships
|
|
150
149
|
text-align: center
|
151
150
|
.month
|
152
151
|
text-transform: uppercase
|
153
|
-
font-size:
|
152
|
+
font-size: 12px
|
154
153
|
.day
|
155
154
|
font-size: 30px
|
156
155
|
.time
|
@@ -158,6 +157,7 @@ ul#shows, ul#memberships
|
|
158
157
|
h4.day_and_month
|
159
158
|
font-weight: bold
|
160
159
|
margin-bottom: 5px
|
160
|
+
margin-top: 2px
|
161
161
|
|
162
162
|
.sections
|
163
163
|
margin-bottom: 20px
|
@@ -176,7 +176,6 @@ ul#shows, ul#memberships
|
|
176
176
|
width: 100px
|
177
177
|
input[type="submit"]
|
178
178
|
margin-top: -8px
|
179
|
-
|
180
179
|
ul#memberships
|
181
180
|
li
|
182
181
|
.title
|
@@ -193,12 +192,40 @@ ul#memberships
|
|
193
192
|
font-size: 25px
|
194
193
|
font-weight: bold
|
195
194
|
|
195
|
+
.seat-row
|
196
|
+
margin-bottom: 3px
|
197
|
+
.seat
|
198
|
+
height: 24px
|
199
|
+
width: 24px
|
200
|
+
border-radius: 14px
|
201
|
+
border: 1px solid #CECECE
|
202
|
+
float: left
|
203
|
+
margin-left: 2px
|
204
|
+
background-repeat: no-repeat
|
205
|
+
.seat-mini
|
206
|
+
height: 16px
|
207
|
+
width: 16px
|
208
|
+
border-radius: 10px
|
209
|
+
.seat-chosen
|
210
|
+
background-color: orange
|
211
|
+
.empty
|
212
|
+
background-color: #479FFF
|
213
|
+
.filled
|
214
|
+
background-color: grey
|
215
|
+
.wheelchair
|
216
|
+
background-image: image_url('/assets/seating_temp/icon_43405.png')
|
217
|
+
background-position: 5px 3px
|
218
|
+
background-size: 18px 18px
|
219
|
+
.noseat
|
220
|
+
border: 0px
|
221
|
+
width: 26px
|
222
|
+
.clear
|
223
|
+
clear: both
|
224
|
+
.member-off
|
225
|
+
opacity: 0.5
|
196
226
|
|
197
227
|
.calendar-month
|
198
|
-
margin-bottom:
|
199
|
-
float: left
|
200
|
-
margin-right: 30px
|
201
|
-
min-height: 250px
|
228
|
+
margin-bottom: 20px
|
202
229
|
h3
|
203
230
|
font-weight: bold
|
204
231
|
|
@@ -340,21 +367,12 @@ table.calendar
|
|
340
367
|
|
341
368
|
.clean
|
342
369
|
.navbar-inner
|
343
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2))
|
344
|
-
background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2)
|
345
|
-
background-image: -o-linear-gradient(top, #ffffff, #f2f2f2)
|
346
|
-
background-image: linear-gradient(to bottom, #ffffff, #f2f2f2)
|
347
370
|
background-repeat: repeat-x
|
348
371
|
border: 1px solid #d4d4d4
|
349
|
-
-
|
350
|
-
-moz-border-radius: 4px
|
351
|
-
border-radius: 4px
|
352
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0)
|
353
|
-
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065)
|
354
|
-
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065)
|
355
|
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065)
|
372
|
+
background-image: none
|
356
373
|
.brand-lite
|
357
|
-
color: #
|
374
|
+
color: #fff
|
375
|
+
font-weight: 100
|
358
376
|
|
359
377
|
.navbar .btn.primary, .btn.btn-orange
|
360
378
|
text-shadow: none
|
@@ -520,6 +538,18 @@ tr.no-border
|
|
520
538
|
vertical-align: baseline
|
521
539
|
margin-top: 0
|
522
540
|
|
541
|
+
#stage
|
542
|
+
width: 200px
|
543
|
+
height: 50px
|
544
|
+
border: 1px solid #999
|
545
|
+
margin: 5px auto
|
546
|
+
background-color: #dfdfdf
|
547
|
+
text-align: center
|
548
|
+
#text
|
549
|
+
padding-top: 27px
|
550
|
+
color: #666
|
551
|
+
padding-top: 18px
|
552
|
+
|
523
553
|
#event-header.side-section
|
524
554
|
h4
|
525
555
|
padding-bottom: 8px
|
@@ -528,3 +558,27 @@ tr.no-border
|
|
528
558
|
font-weight: bold
|
529
559
|
line-height: 1.4em
|
530
560
|
font-size: 1em
|
561
|
+
|
562
|
+
.add-to-cart-success
|
563
|
+
.add-to-cart-message
|
564
|
+
font-size: 24px
|
565
|
+
color: black
|
566
|
+
line-height: 24px
|
567
|
+
padding-top: 10px
|
568
|
+
|
569
|
+
#loginNagModal
|
570
|
+
.modal-header
|
571
|
+
border-bottom: 3px double #ddd
|
572
|
+
h4
|
573
|
+
font-size: 1.3em
|
574
|
+
.modal-body
|
575
|
+
.well
|
576
|
+
height: 160px
|
577
|
+
h6
|
578
|
+
font-size: 14px
|
579
|
+
.button-container
|
580
|
+
margin-top: 30px
|
581
|
+
form
|
582
|
+
margin-top: 20px
|
583
|
+
.center
|
584
|
+
text-align: center
|
@@ -2,17 +2,11 @@ require 'json'
|
|
2
2
|
require 'digest/md5'
|
3
3
|
|
4
4
|
class PdfGeneration
|
5
|
-
PDF_POST_URL = "http://quick-pdf.geminisbs.net/pdfs.json"
|
6
|
-
PDF_GET_URL = "http://quick-pdf.geminisbs.net/pdfs/:id.json?api_key=:key"
|
7
|
-
PDF_DOWNLOAD_URL = "http://quick-pdf.geminisbs.net/pdfs/:id/download?api_key=:key"
|
8
5
|
|
9
6
|
attr_accessor :pdf_options
|
10
7
|
|
11
|
-
def initialize(pdfable
|
8
|
+
def initialize(pdfable)
|
12
9
|
@pdfable = pdfable
|
13
|
-
@pdf_api_key = pdf_api_key
|
14
|
-
@http_party = http_party
|
15
|
-
@sleeper = sleeper
|
16
10
|
@pdf_options = {}
|
17
11
|
end
|
18
12
|
|
@@ -53,12 +47,4 @@ class PdfGeneration
|
|
53
47
|
def filename
|
54
48
|
"#{Digest::MD5.hexdigest pdfable.id.to_s}.pdf"
|
55
49
|
end
|
56
|
-
|
57
|
-
def status_url(json)
|
58
|
-
PDF_GET_URL.gsub(":id", json["id"].to_s).gsub(":key", pdf_api_key)
|
59
|
-
end
|
60
|
-
|
61
|
-
def download_url(json)
|
62
|
-
PDF_DOWNLOAD_URL.gsub(":id", json["id"].to_s).gsub(":key", pdf_api_key)
|
63
|
-
end
|
64
50
|
end
|
@@ -11,8 +11,6 @@ class AdvancedSearchesController < ApplicationController
|
|
11
11
|
redirect_to new_search_path and return
|
12
12
|
end
|
13
13
|
|
14
|
-
@search = AdvancedSearch.new(params[:search])
|
15
|
-
|
16
14
|
respond_to do |format|
|
17
15
|
format.html
|
18
16
|
format.js { render json: { shows: @shows, ticket_types: @ticket_types }}
|
@@ -39,7 +37,7 @@ class AdvancedSearchesController < ApplicationController
|
|
39
37
|
|
40
38
|
respond_to do |format|
|
41
39
|
format.html
|
42
|
-
format.csv { render :csv => Person.where(id: @search.people_ids(1, AdvancedSearch::MAX_SOLR_RESULTS)).includes(:phones, :
|
40
|
+
format.csv { render :csv => Person.where(id: @search.people_ids(1, AdvancedSearch::MAX_SOLR_RESULTS)).includes(:phones, :addresses, :tags).order('lower(people.last_name)'), :filename => "#{@search.id}-#{DateTime.now.strftime("%m-%d-%y")}" }
|
43
41
|
end
|
44
42
|
end
|
45
43
|
|
@@ -1,19 +1,21 @@
|
|
1
1
|
class ChartsController < ApplicationController
|
2
2
|
def update
|
3
|
-
@chart = Chart.find(params[:id])
|
4
|
-
authorize! :edit, @chart
|
5
3
|
|
6
|
-
|
7
|
-
flash[:notice] = "Prices saved."
|
8
|
-
else
|
9
|
-
flash[:error] = "Please name all of your ticket types."
|
10
|
-
redirect_to prices_event_url(@chart.event) and return
|
11
|
-
end
|
4
|
+
assigned_chart = current_user.current_organization.charts.find(params[:id])
|
12
5
|
|
13
|
-
if
|
14
|
-
|
6
|
+
if params[:assigned_chart].present?
|
7
|
+
assigned_chart.update_attributes(params[:assigned_chart])
|
15
8
|
else
|
16
|
-
|
9
|
+
assigned_chart.sync(JSON.parse params[:chart])
|
17
10
|
end
|
11
|
+
|
12
|
+
#reload the chart so we can ensure tickets and ticket_Types are included
|
13
|
+
assigned_chart = Chart.includes(assigned_chart.class.included_models).find(assigned_chart)
|
14
|
+
render :partial => "seating/chart", :locals => { :chart => assigned_chart }, :layout => false
|
15
|
+
end
|
16
|
+
|
17
|
+
def show
|
18
|
+
assigned_chart = current_user.current_organization.charts.find(params[:id])
|
19
|
+
render :partial => "seating/chart", :locals => { :chart => assigned_chart }, :layout => false
|
18
20
|
end
|
19
|
-
end
|
21
|
+
end
|
@@ -14,11 +14,58 @@ class ConsoleSalesController < ArtfullyOseController
|
|
14
14
|
@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)}}
|
15
15
|
|
16
16
|
@pass_types = current_organization.pass_types.all
|
17
|
+
|
18
|
+
if selling_for_seat?
|
19
|
+
@seat = Seat.joins(:chart)
|
20
|
+
.where('charts.organization_id = ?',current_organization.id)
|
21
|
+
.find(params[:seat_id])
|
22
|
+
|
23
|
+
chart = @seat.chart
|
24
|
+
ticket = @seat.ticket
|
25
|
+
|
26
|
+
if ticket.sold?
|
27
|
+
flash[:error] = "We can't put this ticket in your cart because this ticket has already been sold."
|
28
|
+
return
|
29
|
+
end
|
30
|
+
|
31
|
+
@ticket_type = chart.ticket_types.find(params[:ticket_type_id])
|
32
|
+
OrderHandler.new(current_sales_console_cart, nil).add_tickets(ticket, @ticket_type)
|
33
|
+
|
34
|
+
params[:person_id] = @seat.held_for if @seat.held_for.present?
|
35
|
+
verify_person
|
36
|
+
|
37
|
+
if add_all_for_hold?
|
38
|
+
seats = Seat.joins(:chart)
|
39
|
+
.where('charts.organization_id = ?',current_organization.id)
|
40
|
+
.where(:held_for_id => @seat.held_for_id)
|
41
|
+
|
42
|
+
tickets = current_organization.tickets
|
43
|
+
.uncommitted
|
44
|
+
.where(:seat_id => seats.collect(&:id))
|
45
|
+
.where('cart_id is null')
|
46
|
+
|
47
|
+
OrderHandler.new(current_sales_console_cart, nil).add_tickets(tickets, @ticket_type)
|
48
|
+
|
49
|
+
else
|
50
|
+
unless @person.nil?
|
51
|
+
@other_seats_are_being_held = Seat.where(:chart_id => @seat.chart_id)
|
52
|
+
.where(:held_for_id => @seat.held_for_id)
|
53
|
+
.joins(:ticket)
|
54
|
+
.where('tickets.cart_id is null')
|
55
|
+
.count > 0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
17
59
|
end
|
18
60
|
|
19
61
|
def update
|
20
62
|
handler = OrderHandler.new(current_sales_console_cart, nil)
|
21
63
|
handler.handle(params, current_organization)
|
64
|
+
|
65
|
+
unless current_sales_console_cart.applied_pass.nil?
|
66
|
+
@person = Person.find(current_sales_console_cart.applied_pass.person_id)
|
67
|
+
end
|
68
|
+
|
22
69
|
flash[:alert] = handler.error unless handler.error.blank?
|
23
70
|
redirect_to new_console_sale_path(:person_id => @person.try(:id))
|
24
71
|
end
|
@@ -150,6 +197,14 @@ class ConsoleSalesController < ArtfullyOseController
|
|
150
197
|
str
|
151
198
|
end
|
152
199
|
|
200
|
+
def selling_for_seat?
|
201
|
+
params[:seat_id].present?
|
202
|
+
end
|
203
|
+
|
204
|
+
def add_all_for_hold?
|
205
|
+
params[:add_all].present? && params[:add_all] == "true"
|
206
|
+
end
|
207
|
+
|
153
208
|
def verify_person
|
154
209
|
@person_id = params[:person_id]
|
155
210
|
if @person_id.present?
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class EventCalendarsController < ArtfullyOseController
|
2
|
+
def index
|
3
|
+
respond_to do |format|
|
4
|
+
format.json do
|
5
|
+
starts_at = Time.at(params[:start].to_i).to_datetime
|
6
|
+
ends_at = Time.at(params[:end].to_i).to_datetime
|
7
|
+
render :json => Event.as_full_calendar_json(current_user.current_organization, starts_at, ends_at)
|
8
|
+
end
|
9
|
+
|
10
|
+
format.html do
|
11
|
+
render :index
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,17 +1,25 @@
|
|
1
1
|
class EventsController < ArtfullyOseController
|
2
2
|
respond_to :html, :json, :js
|
3
3
|
|
4
|
-
before_filter :find_event, :only => [ :show, :edit, :update, :destroy, :widget, :image, :storefront_link, :prices, :messages, :resell, :wp_plugin, :passes ]
|
4
|
+
before_filter :find_event, :only => [ :show, :edit, :update, :destroy, :widget, :image, :storefront_link, :prices, :messages, :resell, :wp_plugin, :passes, :seating ]
|
5
5
|
before_filter :upcoming_shows, :only => :show
|
6
6
|
before_filter { authorize! :view, @event if @event }
|
7
7
|
|
8
8
|
def create
|
9
9
|
@event = Event.new(params[:event])
|
10
|
-
@templates = current_organization.charts.template
|
11
10
|
@event.organization_id = current_organization.id
|
12
11
|
@event.is_free = !(current_organization.can? :access, :paid_ticketing)
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
venue = Venue.most_recently_named(current_organization, params[:event][:venue_attributes][:name])
|
14
|
+
|
15
|
+
if venue
|
16
|
+
@event.venue = venue.dup
|
17
|
+
@event.set_default_chart(venue.default_chart.dup!({:save => true}))
|
18
|
+
else
|
19
|
+
@event.venue.organization_id = current_organization.id
|
20
|
+
@event.venue.time_zone = current_organization.time_zone
|
21
|
+
end
|
22
|
+
|
15
23
|
@event.contact_email = current_organization.try(:email) || current_user.email
|
16
24
|
|
17
25
|
if @event.save
|
@@ -54,8 +62,8 @@ class EventsController < ArtfullyOseController
|
|
54
62
|
def new
|
55
63
|
@event = current_organization.events.build(:producer => current_organization.name)
|
56
64
|
@event.venue = Venue.new
|
65
|
+
@venue_names = current_organization.venues.pluck(:name).uniq.sort
|
57
66
|
authorize! :new, @event
|
58
|
-
@templates = current_organization.charts.template
|
59
67
|
end
|
60
68
|
|
61
69
|
def edit
|
@@ -107,6 +115,9 @@ class EventsController < ArtfullyOseController
|
|
107
115
|
def prices
|
108
116
|
end
|
109
117
|
|
118
|
+
def seating
|
119
|
+
end
|
120
|
+
|
110
121
|
def passes
|
111
122
|
end
|
112
123
|
|
@@ -5,13 +5,15 @@ class ExchangesController < ArtfullyOseController
|
|
5
5
|
@person = @order.person
|
6
6
|
|
7
7
|
if @items.all?(&:exchangeable?)
|
8
|
-
@events =
|
8
|
+
@events = upcoming_events
|
9
9
|
|
10
10
|
unless params[:event_id].blank?
|
11
11
|
@event = Event.find(params[:event_id])
|
12
12
|
@shows = @event.upcoming_shows(:all)
|
13
13
|
unless params[:show_id].blank? || @event.blank?
|
14
|
-
@show = Show.includes(:event => :venue
|
14
|
+
@show = Show.includes(:event => :venue).find(params[:show_id])
|
15
|
+
@chart = Chart.find(@show.chart_id)
|
16
|
+
@chart = Chart.includes(@chart.class.included_models).find(@show.chart_id)
|
15
17
|
unless params[:ticket_type_id].blank? || @show.blank?
|
16
18
|
@ticket_type = TicketType.find(params[:ticket_type_id])
|
17
19
|
@num_available_tickets = @ticket_type.available
|
@@ -29,14 +31,25 @@ class ExchangesController < ArtfullyOseController
|
|
29
31
|
order = Order.find(params[:order_id])
|
30
32
|
items = params[:items].collect { |item_id| Item.find(item_id) }
|
31
33
|
ticket_type = TicketType.find(params[:ticket_type_id])
|
32
|
-
|
34
|
+
|
35
|
+
if params[:seat_id].present?
|
36
|
+
@tickets = current_organization.tickets.includes(:seat).where(:seat_id => params[:seat_id])
|
37
|
+
@seats = @tickets.collect(&:seat)
|
38
|
+
@selected_tickets_available = @seats.collect(&:available_for_purchase).reduce{|r,e| r && e}
|
39
|
+
else
|
40
|
+
@tickets, error = ticket_type.available_tickets(items.count)
|
41
|
+
end
|
42
|
+
|
33
43
|
logger.debug("Beginning exchange")
|
34
|
-
@exchange = Exchange.new(order, items, tickets, ticket_type, send_email_confirmation?)
|
44
|
+
@exchange = Exchange.new(order, items, @tickets, ticket_type, send_email_confirmation?)
|
35
45
|
|
36
|
-
if tickets.nil?
|
46
|
+
if @tickets.nil?
|
37
47
|
flash[:error] = "Please select tickets to exchange."
|
38
48
|
redirect_to :back
|
39
|
-
elsif
|
49
|
+
elsif !@selected_tickets_available
|
50
|
+
flash[:error] = "Sorry, one or more of your seats is not available for this ecahnge. Please select different seats."
|
51
|
+
redirect_to :back
|
52
|
+
elsif @tickets.size != items.size
|
40
53
|
flash[:error] = "There were not enough tickets available for this show. (#{items.size} needed, #{tickets.size} available.)"
|
41
54
|
redirect_to :back
|
42
55
|
elsif @exchange.valid?
|
@@ -50,7 +63,17 @@ class ExchangesController < ArtfullyOseController
|
|
50
63
|
end
|
51
64
|
end
|
52
65
|
|
53
|
-
|
54
|
-
|
55
|
-
|
66
|
+
private
|
67
|
+
def send_email_confirmation?
|
68
|
+
params[:send_email_confirmation] == "1"
|
69
|
+
end
|
70
|
+
|
71
|
+
def upcoming_events
|
72
|
+
Event.unscoped.where(:deleted_at => nil)
|
73
|
+
.where(:organization_id => current_organization.id)
|
74
|
+
.where(:id => current_organization.shows.unplayed.pluck(:event_id).uniq)
|
75
|
+
.joins(:shows)
|
76
|
+
.order('name ASC')
|
77
|
+
.uniq
|
78
|
+
end
|
56
79
|
end
|
@@ -29,4 +29,12 @@ class ExportController < ArtfullyOseController
|
|
29
29
|
send_data @csv_string, :filename => @filename, :type => "text/csv", :disposition => "attachment"
|
30
30
|
end
|
31
31
|
|
32
|
+
def all_sales
|
33
|
+
@organization = current_user.current_organization
|
34
|
+
@filename = "Artfully-Sales-Export-#{DateTime.now.strftime("%m-%d-%y")}.csv"
|
35
|
+
@items = ItemView.where(:organization_id => current_organization).where("product_type in('Ticket', 'Pass', 'Membership')").all
|
36
|
+
@csv_string = @items.to_comma(:all_sales)
|
37
|
+
send_data @csv_string, :filename => @filename, :type => "text/csv", :disposition => "attachment"
|
38
|
+
end
|
39
|
+
|
32
40
|
end
|