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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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