artfully_ose 1.2.0.pre.21 → 1.2.0.pre.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/change-membership.js +8 -4
  3. data/app/assets/javascripts/custom/show.js +13 -8
  4. data/app/assets/javascripts/locationselector.js +1 -1
  5. data/app/assets/javascripts/store/store.js +7 -0
  6. data/app/assets/stylesheets/application.sass +21 -1
  7. data/app/assets/stylesheets/sass/_tags.sass +13 -2
  8. data/app/controllers/discounts_controller.rb +8 -1
  9. data/app/controllers/events_controller.rb +29 -13
  10. data/app/controllers/events_pass_types_controller.rb +75 -0
  11. data/app/controllers/imports_controller.rb +10 -3
  12. data/app/controllers/membership_types_controller.rb +1 -0
  13. data/app/controllers/pass_types_controller.rb +42 -0
  14. data/app/controllers/passes_controller.rb +13 -0
  15. data/app/controllers/passes_kits_controller.rb +25 -0
  16. data/app/controllers/passes_reports_controller.rb +5 -0
  17. data/app/controllers/sales_controller.rb +0 -2
  18. data/app/controllers/searches_controller.rb +10 -3
  19. data/app/controllers/sections_controller.rb +1 -1
  20. data/app/controllers/segments_controller.rb +4 -4
  21. data/app/controllers/shows_controller.rb +21 -47
  22. data/app/controllers/store/checkouts_controller.rb +6 -1
  23. data/app/controllers/store/orders_controller.rb +2 -0
  24. data/app/controllers/store/passes_controller.rb +9 -0
  25. data/app/controllers/store/store_controller.rb +7 -2
  26. data/app/helpers/link_helper.rb +10 -0
  27. data/app/mailers/reports_mailer.rb +5 -4
  28. data/app/models/cart.rb +21 -16
  29. data/app/models/checkout.rb +6 -1
  30. data/app/models/daily_membership_report.rb +1 -1
  31. data/app/models/daily_pass_report.rb +48 -0
  32. data/app/models/database_views/item_view.rb +69 -19
  33. data/app/models/event.rb +5 -0
  34. data/app/models/events_pass_type.rb +16 -0
  35. data/app/models/ext/integrations.rb +1 -1
  36. data/app/models/ext/preprocessor.rb +1 -0
  37. data/app/models/import.rb +18 -15
  38. data/app/models/imports/donations_import.rb +1 -1
  39. data/app/models/imports/events_import.rb +33 -28
  40. data/app/models/item.rb +13 -3
  41. data/app/models/job/daily_email_report_job.rb +8 -2
  42. data/app/models/job/order_processor.rb +10 -1
  43. data/app/models/job/show_creator.rb +2 -1
  44. data/app/models/kit.rb +1 -1
  45. data/app/models/kits/passes_kit.rb +62 -0
  46. data/app/models/membership.rb +19 -6
  47. data/app/models/membership_change.rb +18 -7
  48. data/app/models/membership_comp.rb +1 -0
  49. data/app/models/membership_type.rb +1 -1
  50. data/app/models/order.rb +18 -9
  51. data/app/models/order_handler.rb +22 -0
  52. data/app/models/organization.rb +7 -0
  53. data/app/models/pass.rb +45 -0
  54. data/app/models/pass_type.rb +19 -0
  55. data/app/models/person.rb +4 -0
  56. data/app/models/search.rb +170 -63
  57. data/app/models/section.rb +2 -0
  58. data/app/models/show.rb +26 -2
  59. data/app/models/show_touch.rb +12 -0
  60. data/app/models/ticket.rb +6 -0
  61. data/app/models/ticket/pricing.rb +1 -0
  62. data/app/models/ticket/reports.rb +16 -0
  63. data/app/models/ticket/sale_transitions.rb +4 -0
  64. data/app/models/ticket/transfers.rb +4 -1
  65. data/app/presenters/event_presenter.rb +1 -1
  66. data/app/views/discounts/_form.html.haml +1 -1
  67. data/app/views/events/_menu.html.haml +4 -13
  68. data/app/views/events/_share_and_sell.haml +2 -1
  69. data/app/views/events_pass_types/_form.html.haml +25 -0
  70. data/app/views/events_pass_types/edit.html.haml +22 -0
  71. data/app/views/events_pass_types/index.html.haml +43 -0
  72. data/app/views/events_pass_types/new.html.haml +22 -0
  73. data/app/views/imports/index.html.haml +2 -2
  74. data/app/views/layouts/_menu.html.haml +2 -1
  75. data/app/views/layouts/storefront.html.haml +3 -1
  76. data/app/views/membership_cancellations/_form.html.haml +1 -1
  77. data/app/views/membership_cancellations/_processing.html.haml +1 -3
  78. data/app/views/membership_types/index.html.haml +1 -1
  79. data/app/views/memberships/index.html.haml +16 -25
  80. data/app/views/orders/_item_table.haml +2 -2
  81. data/app/views/pass_types/_form.html.haml +70 -0
  82. data/app/views/pass_types/_pass_type_fees.html.haml +48 -0
  83. data/app/views/pass_types/edit.html.haml +4 -0
  84. data/app/views/pass_types/index.html.haml +32 -0
  85. data/app/views/pass_types/new.html.haml +4 -0
  86. data/app/views/passes/index.html.haml +40 -0
  87. data/app/views/passes_kits/edit.html.haml +30 -0
  88. data/app/views/passes_reports/index.html.haml +2 -0
  89. data/app/views/people/_header.html.haml +6 -1
  90. data/app/views/reports_mailer/daily.html.haml +19 -0
  91. data/app/views/searches/_form.html.haml +17 -1
  92. data/app/views/shared/_show_time_and_calendar.html.haml +21 -0
  93. data/app/views/shared/_tags.html.haml +2 -2
  94. data/app/views/shows/_controls.html.haml +4 -4
  95. data/app/views/shows/_glance.html.haml +0 -4
  96. data/app/views/shows/_sections_table.html.haml +6 -4
  97. data/app/views/shows/_work_with.html.haml +2 -2
  98. data/app/views/shows/index.html.haml +79 -20
  99. data/app/views/shows/new.html.haml +1 -21
  100. data/app/views/statements/_passes_table.html.haml +25 -0
  101. data/app/views/statements/show.html.haml +4 -1
  102. data/app/views/store/checkouts/thanks.html.haml +13 -5
  103. data/app/views/store/orders/show.html.haml +26 -1
  104. data/app/views/store/passes/index.html.haml +33 -0
  105. data/config/locales/en.yml +2 -0
  106. data/config/routes.rb +8 -2
  107. data/db/migrate/20140207135731_update_items_view.rb +38 -0
  108. data/db/migrate/20140210154723_add_cached_stats.rb +5 -0
  109. data/db/migrate/20140218202726_cache_stats.rb +7 -0
  110. data/db/migrate/20140304171625_passes_ahoy.rb +52 -0
  111. data/db/migrate/20140304174807_add_passes_kit.rb +5 -0
  112. data/db/migrate/20140307144454_add_events_pass_types.rb +9 -0
  113. data/db/migrate/20140307193350_add_pass_id_to_cart.rb +7 -0
  114. data/db/migrate/20140314162422_add_total_paid_to_membership.rb +13 -0
  115. data/db/migrate/20140319191237_add_show_dates_to_advanced_search.rb +6 -0
  116. data/db/migrate/20140328172333_add_cols_to_events_pass_types.rb +6 -0
  117. data/db/migrate/20140328174217_add_deleted_at_to_ept.rb +9 -0
  118. data/db/migrate/20140328185432_add_active_to_ept.rb +5 -0
  119. data/db/migrate/20140328192612_add_pass_type_id_to_search.rb +5 -0
  120. data/lib/artfully_ose.rb +3 -3
  121. data/lib/artfully_ose/version.rb +1 -1
  122. data/spec/factories/kit_factories.rb +5 -0
  123. data/spec/factories/membership_factories.rb +1 -0
  124. metadata +45 -6
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDc1ZGFhYjJlMjczOGExMjQ2MWMwMjRlNGIzYTA5MjlhMmM4YTQ4ZA==
4
+ ODcyYzg1ZTUzZmI5NjVlNzgzNDdmMTcyN2EwNDMwOTI1NTJjZjQ1Zg==
5
5
  data.tar.gz: !binary |-
6
- YjUzYjk1MzdiZWE5ZmY5NzJmMzhhNDZjNTY0NzBiNWZhMGU1YTY0ZA==
6
+ MDljN2U0ODMzZWZiMWY2NWEwOTU4ZWE0ZWZjYTIzOTYzZjEyYTNkOQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjdiOWI1ZmZjNTBiOTc1NjAwNTZlMTgwNGZlYjc1NWQxM2E4NGM3M2FmZmQ3
10
- OTE4MjZjNzMwMmZlZjBmMGRjODMwN2RjZjMxNzVjNTZlMTFhNzZjMzNmM2Qx
11
- NTAzM2RkN2E2NDE3YTg0NzA1ZWZjY2Y4MmY4MzA1YTJlMzIwZGQ=
9
+ ZTcwMzgwY2NiNWExZTVlYzkxYTg5ZmUxZjBmYzM2OGEwYzIwZTk1OTQ2Mzc2
10
+ YjllMTgyMWUyMzRlM2NlNzExYmI4N2I4ZDUwM2Q3YjA2ZDA0NDI0YzFjYjgx
11
+ N2E5NzgxZWZhMjZlMTVjOTRmZTA2YThjMzc1ZjdmYTc0Nzk0NjY=
12
12
  data.tar.gz: !binary |-
13
- YjEzZDcxNjQ1MmI3OTkyMmY3N2U5MWQ1NmQyYTQ3YzM1YmZiYTA1ZWY4NzEx
14
- Y2E4NTc0MTY0MDQ4ZTBiZjA3NzE4YWZlNTg3YzBkYjIzYmUwZGE3NjYzN2Fh
15
- YjgzMDE3NzM0NTliZTFiYjJlNmM0NGQxNmI5ZjlkNmFiYzEyNjg=
13
+ ZWE5MTFhMTI3YWFiNGJhMmRlMDU3ZmNkM2JiYmJjYWM1ZDQ3NWRiNWE3YTU1
14
+ NzJkZGUwMTlhZTg3Y2Y1ZWU0YjY2MGViYzU3YWY2NWE0MzM5YThjMTcyN2Yx
15
+ MjAwMzIwMTZmNWRiMDk2MTFhOTU1ZDFjZjQ4NGI1NjBhN2EyMDU=
@@ -112,12 +112,16 @@ angular.module('artfully').controller('MembershipActionsCtrl', ['$scope', 'membe
112
112
  angular.module('artfully').controller('ChangeMembershipController', ['$scope', 'membershipSelections', function($scope, membershipSelections) {
113
113
 
114
114
  // Template variables
115
- $scope.payment_method = 'cash';
115
+ $scope.payment_method = '';
116
116
  $scope.price = 0;
117
- $scope.total = 0;
117
+ $scope.total = '$0.00';
118
118
  $scope.selected = {};
119
119
 
120
120
  // Helpers
121
+ $scope.comped = function() {
122
+ return !!('' == $scope.payment_method || 'comp' == $scope.payment_method);
123
+ }
124
+
121
125
  $scope.updateTotal = function() {
122
126
  var price = parseFloat($scope.price.substr(1).replace(/,/, ""));
123
127
  var total = (Object.keys($scope.selected).length * price);
@@ -135,9 +139,9 @@ angular.module('artfully').controller('ChangeMembershipController', ['$scope', '
135
139
 
136
140
  // Clear the list of selected ids when the modal is hidden
137
141
  $("#change").on('hidden', function(hidden) {
138
- $scope.payment_method = 'cash';
142
+ $scope.payment_method = '';
139
143
  $scope.price = 0;
140
- $scope.total = 0;
144
+ $scope.updateTotal();
141
145
  $scope.selected = {};
142
146
 
143
147
  // Reset the form
@@ -2,12 +2,12 @@ $(document).ready(function () {
2
2
 
3
3
  /***** Calendar for existing shows *****/
4
4
 
5
- var cal = $('#show-calendar')
6
- cal.fullCalendar({
5
+ var showCal = $('#show-calendar')
6
+ showCal.fullCalendar({
7
7
  height: 500
8
8
  ,eventSources: [
9
9
  {
10
- url: '/events/'+cal.attr('data-event-id')+'.json', color: "#adadad"
10
+ url: '/events/'+showCal.attr('data-event-id')+'.json', color: "#adadad"
11
11
  ,success: function(data) {
12
12
  $.each(data, function (index, obj) {
13
13
  if(obj.state == "unpublished") {
@@ -31,7 +31,7 @@ $(document).ready(function () {
31
31
  var cal = $('#new-show-calendar')
32
32
  cal.fullCalendar({
33
33
  height: 400
34
- ,eventSources: [ { url: '/events/'+cal.attr('data-event-id')+'.json', color: "#adadad" } ]
34
+ ,eventSources: [ { url: '/'+cal.attr('data-event-type')+'/'+cal.attr('data-event-id')+'.json', color: "#adadad" } ]
35
35
  ,events: eventArray
36
36
  ,dayClick: function(date, allDay, jsEvent, view) {
37
37
  var validShow = true
@@ -147,10 +147,15 @@ $(document).ready(function () {
147
147
  });
148
148
 
149
149
  $(".sprited").on("ajax:success", function(xhr, show){
150
- var $row = $(this).closest(".sprited-container");
151
- $(this).find(":submit").removeAttr('disabled');
152
- $row.removeClass("pending built published unpublished")
153
- $row.addClass(show.state);
150
+ var container = $(this).parents(".sprited-container");
151
+ var sprited = $(".sprited-element", container)
152
+ sprited.push(container)
153
+
154
+ $.each(sprited, function () {
155
+ $(this).find(":submit").removeAttr('disabled');
156
+ $(this).removeClass("pending built published unpublished")
157
+ $(this).addClass(show.state);
158
+ })
154
159
  $('.show-state').html(show.state)
155
160
  });
156
161
 
@@ -43,7 +43,7 @@
43
43
  "Canada": new Array('Alberta','British Columbia','Manitoba','New Brunswick','Newfoundland and Labrador','Northwest Territories','Nova Scotia','Nunavut','Ontario','Prince Edward Island','Quebec','Saskatchewan','Yukon'),
44
44
  "France": new Array('Alsace','Aquitaine','Auvergne','Basse-Normandie','Bourgogne','Bretagne','Centre','Champagne-Ardenne','Corse','Franche-Comté','Guadeloupe','Guyanne','Haute-Normandie','ÃŽle-de-France','Languedoc-Rousillon','Limousin','Lorraine','Martinique','Midi-Pyrénées','Nord-Pas-de-Calais','Pays de la Loire','Picardie','Poitou-Charentes','Provence-Alpes-Côte d\'Azur','Réunion','Rhône-Alpes'),
45
45
  "United Kingdom": new Array('Aberdeen City','Aberdeenshire','Angus','Antrim','Argyll and Bute','Armagh','Avon','Bedfordshire','Berkshire','Blaenau Gwent','Borders','Bridgend','Bristol','Buckinghamshire','Caerphilly','Cambridgeshire','Cardiff','Carmarthenshire','Ceredigion','Channel Islands','Cheshire','Clackmannan','Cleveland','Conwy','Cornwall','Cumbria','Denbighshire','Derbyshire','Devon','Dorset','Down','Dumfries and Galloway','Dundee (City of)','Durham','East Ayrshire','East Dunbartonshire','East Lothian','East Renfrewshire','East Riding of Yorkshire','East Sussex','Edinburgh (City of)','Essex','Falkirk','Fermanagh','Fife Glasgow (City of)','Flintshire','Gloucestershire','Greater Manchester','Gwynedd','Hampshire','Herefordshire','Hertfordshire','Highland','Humberside','Humberside','Inverclyde','Isle of Anglesey','Isle of Man','Isle of Wight','Isles of Scilly','Kent','Lancashire','Leicestershire','Lincolnshire','London','Londonderry','Merseyside','Merthyr Tydfil','Middlesex','Midlothian','Monmouthshire','Moray','Neath Port Talbot','Newport','Norfolk','North Ayrshire','North Lanarkshire','North Yorkshire','Northamptonshire','Northumberland','Nottinghamshire','Orkney','Oxfordshire','Pembrokeshire','Perthshire and Kinross','Powys','Renfrewshire','Rhondda Cynon Taff','Rutland','Shetland','Shropshire','Somerset','South Ayrshire','South Lanarkshire','South Yorkshire','Staffordshire','Stirling','Suffolk','Surrey','Swansea','The Vale of Glamorgan','Torfaen','Tyne and Wear','Tyrone','Warwickshire','West Dunbartonshire','West Lothian','West Midlands','West Sussex','West Yorkshire','Western Isles','Wiltshire','Worcestershire','Wrexham'),
46
- "United States": new Array('Alaska','Alabama','American Samoa','Arkansas','Armed Forces Africa','Armed Forces Europe','Armed Forces Pacific','Arizona','California','Colorado','Connecticut','District of Columbia','Delaware','Federated States of Micronesia','Florida','Georgia','Guam','Hawaii','Iowa','Idaho','Illinois','Indiana','Kansas','Kentucky','Louisiana','Massachusetts','Northern Mariana Islands','Marshall Islands','Maryland','Maine','Michigan','Minnesota','Missouri','Mississippi','Montana','North Carolina','North Dakota','Nebraska','New Hampshire','New Jersey','New Mexico','Nevada','New York','Ohio','Oklahoma','Oregon','Pennsylvania','Palau','Puerto Rico','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Virginia','Virgin Islands','Vermont','Washington','Wisconsin','West Virgina','Wyoming')
46
+ "United States": new Array('Alaska','Alabama','American Samoa','Arkansas','Armed Forces Africa','Armed Forces Europe','Armed Forces Pacific','Arizona','California','Colorado','Connecticut','District of Columbia','Delaware','Federated States of Micronesia','Florida','Georgia','Guam','Hawaii','Iowa','Idaho','Illinois','Indiana','Kansas','Kentucky','Louisiana','Massachusetts','Northern Mariana Islands','Marshall Islands','Maryland','Maine','Michigan','Minnesota','Missouri','Mississippi','Montana','North Carolina','North Dakota','Nebraska','New Hampshire','New Jersey','New Mexico','Nevada','New York','Ohio','Oklahoma','Oregon','Pennsylvania','Palau','Puerto Rico','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Virginia','Virgin Islands','Vermont','Washington','Wisconsin','West Virginia','Wyoming')
47
47
  }
48
48
 
49
49
  return this.each(function() {
@@ -71,6 +71,13 @@ $(document).ready(function(){
71
71
  $('tr#discount-input').show();
72
72
  });
73
73
 
74
+ $('#pass-code-link a').click(function(e) {
75
+ e.preventDefault();
76
+ $('tr#pass-code-link').hide();
77
+ $('tr#pass-code-display').hide();
78
+ $('tr#pass-code-input').show();
79
+ });
80
+
74
81
  // add * to required field labels
75
82
  $('label.required').append('&nbsp;<strong>*</strong>&nbsp;');
76
83
 
@@ -118,6 +118,13 @@ ul#memberships
118
118
  height: 150px
119
119
  #text
120
120
  padding-top: 50px
121
+
122
+ #add-a-pass-type
123
+ text-align: center
124
+ width: 75%
125
+ height: 150px
126
+ #text
127
+ padding-top: 50px
121
128
 
122
129
  #day-date
123
130
  width: 95%
@@ -229,7 +236,14 @@ ul.built li.built,
229
236
  ul.pending li.pending,
230
237
  ul.destroyable li.destroyable
231
238
  display: inline
239
+
240
+ tr.unpublished
241
+ background-color: #EEE
232
242
 
243
+ tr.valign
244
+ td
245
+ vertical-align: middle
246
+
233
247
  .dialog
234
248
  display: none
235
249
 
@@ -434,7 +448,7 @@ a.artfully-tooltip, a.artfully-tooltip:hover
434
448
  text-decoration: none
435
449
 
436
450
  // People Records
437
- body[data-controller=people][data-action=show], body[data-controller=memberships][data-action=index]
451
+ body[data-controller=people][data-action=show], body[data-controller=memberships][data-action=index], body[data-controller=passes][data-action=index]
438
452
  padding-top: 10px
439
453
 
440
454
  .person-header
@@ -676,3 +690,9 @@ p.alternate_form_link
676
690
 
677
691
  .bordered-section
678
692
  border-bottom: 1px solid #ACACAE
693
+
694
+ .control-group
695
+ .controls
696
+ label
697
+ margin-bottom: 5px
698
+ padding-top: 5px
@@ -39,11 +39,22 @@ ul.tags
39
39
 
40
40
  .tag
41
41
  background-color: #f8930a
42
- border-right: 1px solid #a85300
43
- border-bottom: 1px solid #a85300
44
42
  padding: 2px 4px 2px 4px
45
43
  font-size: 10pt
46
44
  color: #EEEEEE
45
+ .tag-member
46
+ background-color: #175c71
47
+ padding: 3px 5px 3px 5px
48
+ a
49
+ font-weight: normal
50
+ color:white
51
+ .tag-passholder
52
+ background-color: #8e0a34
53
+ padding: 3px 5px 3px 5px
54
+ font-weight: normal
55
+ a
56
+ font-weight: normal
57
+ color:white
47
58
 
48
59
  .tag-error
49
60
  color: #991111
@@ -60,6 +60,13 @@ private
60
60
  end
61
61
 
62
62
  def grab_ticket_type_names
63
- @ticket_type_names = @event.charts.includes(:sections => :ticket_types).collect{|c| c.ticket_types.collect{|s| s.name}}.flatten.uniq.sort
63
+ @ticket_type_names = []
64
+ @event.charts.includes(:sections => :ticket_types).each do |chart|
65
+ chart.sections.each do |section|
66
+ @ticket_type_names << section.ticket_types.collect{ |tt| tt.name }
67
+ end
68
+ end
69
+ @ticket_type_names = @ticket_type_names.flatten.uniq.sort
70
+ @ticket_type_names
64
71
  end
65
72
  end
@@ -1,7 +1,7 @@
1
1
  class EventsController < ArtfullyOseController
2
2
  respond_to :html, :json
3
3
 
4
- before_filter :find_event, :only => [ :show, :edit, :update, :destroy, :widget, :image, :storefront_link, :prices, :messages, :resell, :wp_plugin ]
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
6
6
  before_filter { authorize! :view, @event if @event }
7
7
 
@@ -71,18 +71,8 @@ class EventsController < ArtfullyOseController
71
71
  authorize! :edit, @event
72
72
 
73
73
  if @event.update_attributes(params[:event])
74
- if user_requesting_next_step?
75
- if user_just_uploaded_an_image?
76
- redirect_to messages_event_path(@event)
77
- elsif user_set_special_instructions?
78
- redirect_to event_shows_path(@event)
79
- else
80
- redirect_to edit_event_venue_path(@event)
81
- end
82
- else
83
- flash[:notice] = "Your event has been updated."
84
- redirect_to event_url(@event)
85
- end
74
+ build_flash_message
75
+ redirect_to redirect_path and return
86
76
  else
87
77
  render :edit
88
78
  end
@@ -107,6 +97,9 @@ class EventsController < ArtfullyOseController
107
97
  def prices
108
98
  end
109
99
 
100
+ def passes
101
+ end
102
+
110
103
  def messages
111
104
  end
112
105
 
@@ -116,6 +109,29 @@ class EventsController < ArtfullyOseController
116
109
  end
117
110
 
118
111
  private
112
+
113
+ def redirect_path
114
+ if user_requesting_next_step?
115
+ if user_just_uploaded_an_image?
116
+ messages_event_path(@event)
117
+ elsif user_set_special_instructions?
118
+ event_shows_path(@event)
119
+ else
120
+ edit_event_venue_path(@event)
121
+ end
122
+ else
123
+ event_url(@event)
124
+ end
125
+ end
126
+
127
+ def build_flash_message
128
+ if user_just_uploaded_an_image?
129
+ flash[:notice] = "We're processing your image and will have the new image up in a few minutes."
130
+ else
131
+ flash[:notice] = "Your event has been updated."
132
+ end
133
+ end
134
+
119
135
  def find_event
120
136
  @event = Event.find(params[:id])
121
137
  end
@@ -0,0 +1,75 @@
1
+ class EventsPassTypesController < ArtfullyOseController
2
+ before_filter :find_event, :grab_ticket_type_names
3
+ before_filter { authorize! :view, @event if @event }
4
+
5
+ def index
6
+ @no_pass_types = current_organization.pass_types.empty?
7
+ @events_pass_types = @event.events_pass_types
8
+
9
+ # if they've set up a pass type but this event doesn't have any pass types yet, then kick them right to /new
10
+ if @events_pass_types.empty? && !@no_pass_types
11
+ redirect_to new_event_events_pass_type_path(@event) and return
12
+ end
13
+ end
14
+
15
+ def new
16
+ @events_pass_type = EventsPassType.new
17
+ @pass_type_options = current_organization.pass_types
18
+ .reject{|pt| @event.events_pass_types.collect(&:pass_type_id).include?(pt.id)}
19
+ .collect{|pass_type| [pass_type.name, pass_type.id]}.sort{|a, b| a[0] <=> b[0]}
20
+
21
+ @pass_types = current_organization.pass_types.empty?
22
+ end
23
+
24
+ def create
25
+ @events_pass_type = EventsPassType.new.tap do |ept|
26
+ ept.organization = current_organization
27
+ ept.event = @event
28
+ ept.pass_type = current_organization.pass_types.find(params[:events_pass_type][:pass_type])
29
+ ept.ticket_types = Set.new(params[:events_pass_type][:ticket_types].reject!(&:blank?))
30
+ ept.excluded_shows = Set.new(params[:events_pass_type][:excluded_shows].reject!(&:blank?))
31
+ ept.active = params[:events_pass_type][:active]
32
+ end
33
+
34
+ if @events_pass_type.save
35
+ flash[:notice] = "Your pass has been attached to this event."
36
+ else
37
+ flash[:error] = @events_pass_type.errors.full_messages.to_sentence
38
+ end
39
+ redirect_to event_events_pass_types_path(@event)
40
+ end
41
+
42
+ def edit
43
+ @events_pass_type = EventsPassType.find(params[:id])
44
+ end
45
+
46
+ def update
47
+ @events_pass_type = EventsPassType.find(params[:id])
48
+ @events_pass_type.ticket_types = Set.new(params[:events_pass_type][:ticket_types].reject!(&:blank?))
49
+ @events_pass_type.excluded_shows = Set.new(params[:events_pass_type][:excluded_shows].reject!(&:blank?))
50
+ @events_pass_type.active = params[:events_pass_type][:active]
51
+
52
+ if @events_pass_type.save
53
+ flash[:notice] = "Your pass has been updated."
54
+ else
55
+ flash[:error] = @events_pass_type.errors.full_messages.to_sentence
56
+ end
57
+ redirect_to event_events_pass_types_path(@event)
58
+ end
59
+
60
+ private
61
+ def find_event
62
+ @event = current_organization.events.includes(:events_pass_types => :pass_type).find(params[:event_id])
63
+ end
64
+
65
+ def grab_ticket_type_names
66
+ @ticket_type_names = []
67
+ @event.charts.includes(:sections => :ticket_types).each do |chart|
68
+ chart.sections.each do |section|
69
+ @ticket_type_names << section.ticket_types.collect{ |tt| tt.name }
70
+ end
71
+ end
72
+ @ticket_type_names = @ticket_type_names.flatten.uniq.sort
73
+ @ticket_type_names
74
+ end
75
+ end
@@ -5,7 +5,7 @@ class ImportsController < ArtfullyOseController
5
5
 
6
6
  def index
7
7
  @imports = organization.imports.includes(:user, :organization).order('created_at desc').all
8
- @sales_csv_download_link = sales_csv_download_link
8
+ @sales_csv_download_link, @donations_csv_download_link = download_links
9
9
  end
10
10
 
11
11
  def approve
@@ -104,7 +104,7 @@ class ImportsController < ArtfullyOseController
104
104
  @type = (params[:type] || session[:type])
105
105
  end
106
106
 
107
- def sales_csv_download_link
107
+ def download_links
108
108
  s3 = AWS::S3.new(
109
109
  :access_key_id => ENV['S3_ACCESS_KEY_ID'],
110
110
  :secret_access_key => ENV['S3_SECRET_ACCESS_KEY']
@@ -112,7 +112,14 @@ class ImportsController < ArtfullyOseController
112
112
  bucket = s3.buckets[ENV['S3_BUCKET']]
113
113
  object = bucket.objects[ItemView.sales_export_filename_for(current_organization)]
114
114
  url = object.url_for(:read, :expires => 10*60)
115
- url.to_s
115
+ sales_link = url.to_s
116
+
117
+ bucket = s3.buckets[ENV['S3_BUCKET']]
118
+ object = bucket.objects[ItemView.donations_export_filename_for(current_organization)]
119
+ url = object.url_for(:read, :expires => 10*60)
120
+ donations_link = url.to_s
121
+
122
+ [sales_link, donations_link]
116
123
  end
117
124
 
118
125
  end
@@ -18,6 +18,7 @@ class MembershipTypesController < ArtfullyOseController
18
18
  def new
19
19
  with_type_selected do
20
20
  @membership_type = Kernel.const_get(params[:type].camelize).new
21
+ @membership_type.hide_fee = true
21
22
  end
22
23
  end
23
24
 
@@ -0,0 +1,42 @@
1
+ class PassTypesController < ArtfullyOseController
2
+ requires_kit :passes
3
+
4
+ def index
5
+ @pass_types = current_organization.pass_types.includes(:passes).paginate(:page => params[:page], :per_page => 50)
6
+
7
+ respond_to do |format|
8
+ format.html
9
+
10
+ format.csv do
11
+ @filename = 'pass_types.csv'
12
+ @csv_string = @pass_types.to_comma
13
+ send_data @csv_string, :filename => @filename, :type => 'text/csv', :disposition => 'attachment'
14
+ end
15
+ end
16
+ end
17
+
18
+ def new
19
+ @pass_type = PassType.new
20
+ end
21
+
22
+ def create
23
+ @pass_type = PassType.new(params[:pass_type])
24
+ @pass_type.organization = current_organization
25
+ unless @pass_type.save
26
+ flash[:error] = @pass_type.errors.full_messages.to_sentence
27
+ render "new" and return
28
+ end
29
+ redirect_to pass_types_path
30
+ end
31
+
32
+ def edit
33
+ @pass_type = current_user.current_organization.pass_types.where(:id => params[:id]).first
34
+ end
35
+
36
+ def update
37
+ @pass_type = PassType.find(params[:id])
38
+ @pass_type.update_attributes(params[:pass_type])
39
+ flash[:notice] = "Your changes have been saved"
40
+ redirect_to pass_types_path
41
+ end
42
+ end