artfully_ose 1.2.0.pre.9 → 1.2.0.pre.10
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.
- checksums.yaml +8 -8
- data/app/assets/javascripts/application.js +7 -2
- data/app/controllers/artfully_ose_controller.rb +15 -0
- data/app/controllers/store/memberships_controller.rb +1 -1
- data/app/models/ext/integrations.rb +29 -19
- data/app/models/import.rb +18 -19
- data/app/models/job/mailchimp_sync_job.rb +1 -3
- data/app/models/kits/mailchimp_kit.rb +11 -6
- data/app/models/membership_type.rb +3 -1
- data/app/models/organization.rb +14 -3
- data/app/models/person.rb +1 -1
- data/app/models/ticket_summary.rb +4 -1
- data/app/models/user.rb +1 -3
- data/app/models/user_membership.rb +16 -0
- data/app/views/events/_ticket_type_fields.html.haml +2 -0
- data/app/views/membership_types/_form.html.haml +9 -1
- data/app/views/membership_types/_seasonal_membership_type_form.html.haml +2 -2
- data/app/views/membership_types/index.html.haml +1 -1
- data/app/views/memberships/index.html.haml +2 -1
- data/app/views/order_mailer/confirmation_for.html.haml +17 -19
- data/app/views/order_mailer/confirmation_for.text.haml +6 -3
- data/db/migrate/20131023200559_add_admin_to_user_memberships.rb +14 -0
- data/db/migrate/20131029173612_add_sales_start_to_membership_typ.rb +6 -0
- data/lib/artfully_ose/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjU5MDg5NmVkZGE5NjhmMGRhZjczMzA1YzE3ZWU4ODJhNWE3NzUwYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjczZTg0N2QzODRiMmJhNDAyMTg2ODgzZmRiMjYzOWU5MWE3ZTNmNw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzA4NzVlZWI2MmY5YjAzYzIxOTAzMTJiZjVmNmZkNTRkNGM4NzM1OWNkMDRk
|
10
|
+
NjM0NmYyMzJiODFjNDIyZTUxOWY5MDllOWQwN2Y0NzBiZjAzYzI0NTUwMWMw
|
11
|
+
MDgwODk1ZjM3NWE4ZjBmMDliOTZmODBjM2M1NTBmYzM5ZDBhMmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjJjYWY1NWNhMmE3ZWM1YjBlYzZjYmQxNDczODAwZmEyYzc5NjM4YzI2OTRm
|
14
|
+
MmRkN2JlNDgyZTE0MWEyNzRhMjBmZWY2NGU2OTU0YWNmMjhlOThkNDQzZGYx
|
15
|
+
NTMyMWE3ZWExYTg4NzI3MTM4YmE4OGNiZThkNjJlZmIzMTIxNzk=
|
@@ -207,8 +207,8 @@ $(document).ready(function() {
|
|
207
207
|
});
|
208
208
|
|
209
209
|
$(document).locationSelector({
|
210
|
-
'countryField' : '#
|
211
|
-
'regionField' : '#
|
210
|
+
'countryField' : '#user_organization_country',
|
211
|
+
'regionField' : '#user_organization_state'
|
212
212
|
});
|
213
213
|
|
214
214
|
$(document).locationSelector({
|
@@ -523,7 +523,12 @@ function activateControls() {
|
|
523
523
|
});
|
524
524
|
});
|
525
525
|
|
526
|
+
$(".datepicker-alt-field" ).datepicker({
|
527
|
+
dateFormat: 'yy-mm-dd',
|
528
|
+
altField: '#ends_at'
|
529
|
+
});
|
526
530
|
$(".datepicker" ).datepicker({dateFormat: 'yy-mm-dd'});
|
531
|
+
|
527
532
|
if (!Modernizr.inputtypes.date) {
|
528
533
|
$('input[type="date"]').datepicker({
|
529
534
|
dateFormat: 'yy-mm-dd'
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class ArtfullyOseController < ActionController::Base
|
2
|
+
include Ext::Integrations::ArtfullyOseController
|
2
3
|
|
3
4
|
protect_from_forgery
|
4
5
|
|
5
6
|
before_filter :authenticate_user!
|
6
7
|
layout :specify_layout
|
7
8
|
after_filter :set_csrf_cookie_for_angular
|
9
|
+
before_filter :require_more_info
|
8
10
|
|
9
11
|
delegate :current_organization, :to => :current_user
|
10
12
|
|
@@ -75,4 +77,17 @@ class ArtfullyOseController < ActionController::Base
|
|
75
77
|
def set_csrf_cookie_for_angular
|
76
78
|
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
|
77
79
|
end
|
80
|
+
|
81
|
+
def require_more_info
|
82
|
+
if need_more_info?
|
83
|
+
flash[:info] = "We need to collect more information about your organization before you continue."
|
84
|
+
redirect_to collect_info_signups_path
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def keep_page_from_caching
|
89
|
+
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
|
90
|
+
response.headers["Pragma"] = "no-cache"
|
91
|
+
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
|
92
|
+
end
|
78
93
|
end
|
@@ -2,11 +2,14 @@ module Ext
|
|
2
2
|
module Integrations
|
3
3
|
module Member
|
4
4
|
end
|
5
|
-
|
5
|
+
|
6
6
|
module User
|
7
|
+
def need_more_info?
|
8
|
+
false
|
9
|
+
end
|
7
10
|
end
|
8
|
-
|
9
|
-
module Kit
|
11
|
+
|
12
|
+
module Kit
|
10
13
|
def record_activation
|
11
14
|
end
|
12
15
|
|
@@ -24,11 +27,11 @@ module Ext
|
|
24
27
|
.includes(:sections => :ticket_types)
|
25
28
|
.where('shows.id = ?', self.id)
|
26
29
|
.where("ticket_types.#{channel} = ?", true)
|
27
|
-
|
30
|
+
|
28
31
|
chart.first
|
29
32
|
end
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
module Organization
|
33
36
|
def self.included(base)
|
34
37
|
base.class_eval do
|
@@ -42,11 +45,11 @@ module Ext
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
45
|
-
|
48
|
+
|
46
49
|
def connected?
|
47
50
|
false
|
48
|
-
end
|
49
|
-
|
51
|
+
end
|
52
|
+
|
50
53
|
def fsp
|
51
54
|
nil
|
52
55
|
end
|
@@ -69,37 +72,37 @@ module Ext
|
|
69
72
|
def name_for_donations
|
70
73
|
self.name
|
71
74
|
end
|
72
|
-
|
75
|
+
|
73
76
|
def update_kits
|
74
77
|
end
|
75
78
|
|
76
79
|
def sponsored_kit
|
77
80
|
nil
|
78
81
|
end
|
79
|
-
|
82
|
+
|
80
83
|
def shows_with_sales
|
81
84
|
raise "Just use shows"
|
82
85
|
end
|
83
86
|
end
|
84
|
-
|
87
|
+
|
85
88
|
module Order
|
86
89
|
def self.included(base)
|
87
90
|
base.extend ClassMethods
|
88
91
|
end
|
89
|
-
|
92
|
+
|
90
93
|
def fa_id
|
91
94
|
nil
|
92
95
|
end
|
93
|
-
|
96
|
+
|
94
97
|
module ClassMethods
|
95
|
-
def sale_search(search)
|
98
|
+
def sale_search(search)
|
96
99
|
standard = ::Order.includes(:items => { :show => :event })
|
97
100
|
|
98
|
-
if search.start
|
101
|
+
if search.start
|
99
102
|
standard = standard.after(search.start)
|
100
103
|
end
|
101
104
|
|
102
|
-
if search.stop
|
105
|
+
if search.stop
|
103
106
|
standard = standard.before(search.stop)
|
104
107
|
end
|
105
108
|
|
@@ -115,7 +118,7 @@ module Ext
|
|
115
118
|
|
116
119
|
standard.all
|
117
120
|
end
|
118
|
-
end
|
121
|
+
end
|
119
122
|
end
|
120
123
|
|
121
124
|
module Ticket
|
@@ -128,17 +131,24 @@ module Ext
|
|
128
131
|
def record_comp
|
129
132
|
end
|
130
133
|
end
|
131
|
-
|
134
|
+
|
132
135
|
module Event
|
133
136
|
def shows_with_sales(seller)
|
134
137
|
raise "Just use shows"
|
135
138
|
end
|
136
139
|
end
|
137
|
-
|
140
|
+
|
138
141
|
module Item
|
139
142
|
def settlement_issued?
|
140
143
|
false
|
141
144
|
end
|
142
145
|
end
|
146
|
+
|
147
|
+
module ArtfullyOseController
|
148
|
+
def need_more_info?
|
149
|
+
current_user.try(:need_more_info?)
|
150
|
+
end
|
151
|
+
private :need_more_info?
|
152
|
+
end
|
143
153
|
end
|
144
154
|
end
|
data/app/models/import.rb
CHANGED
@@ -73,9 +73,9 @@ class Import < ActiveRecord::Base
|
|
73
73
|
#
|
74
74
|
# This composes errors thrown *during* the import. For validation errors, see invalidate!
|
75
75
|
#
|
76
|
-
def fail!(error
|
76
|
+
def fail!(error, row = nil, row_num = 0)
|
77
77
|
Rails.logger.error "IMPORT ERROR [#{self.id}]: #{error.message}"
|
78
|
-
error.backtrace.each { |line| Rails.logger.error " #{line}" }
|
78
|
+
error.backtrace.each { |line| Rails.logger.error " #{line}" } if error.backtrace
|
79
79
|
self.import_errors.create! :row_data => row, :error_message => "Row #{row_num}: #{error.message}"
|
80
80
|
failed!
|
81
81
|
rollback
|
@@ -169,24 +169,23 @@ class Import < ActiveRecord::Base
|
|
169
169
|
person.skip_commit = true
|
170
170
|
person
|
171
171
|
end
|
172
|
-
|
172
|
+
|
173
173
|
def create_person(parsed_row)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
end
|
174
|
+
if !attach_person(parsed_row).naming_details_available?
|
175
|
+
person = self.organization.dummy
|
176
|
+
elsif !parsed_row.email.blank?
|
177
|
+
person = Person.first_or_create({:email => parsed_row.email, :organization => self.organization}.merge(parsed_row.person_attributes), {}) do |p|
|
178
|
+
p.import = self
|
179
|
+
end
|
180
|
+
else
|
181
|
+
person = attach_person(parsed_row)
|
182
|
+
if !person.save
|
183
|
+
self.reload
|
184
|
+
fail!(RowError.new(person.errors.full_messages.join(", ")), parsed_row.row)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
person
|
188
|
+
end
|
190
189
|
|
191
190
|
class RowError < ArgumentError
|
192
191
|
end
|
@@ -33,10 +33,8 @@ class MailchimpSyncJob < Struct.new(:mailchimp_kit, :options)
|
|
33
33
|
mailchimp_kit.sync_merged_winner_to_mailchimp(options[:winner_id], options[:new_lists])
|
34
34
|
end
|
35
35
|
|
36
|
-
#
|
37
|
-
# Noop. We don't respond to this yet.
|
38
|
-
#
|
39
36
|
def webhook_cleaned
|
37
|
+
mailchimp_kit.sync_mailchimp_webhook_cleaned(list_id, data)
|
40
38
|
end
|
41
39
|
|
42
40
|
def webhook_subscribe
|
@@ -253,6 +253,16 @@ class MailchimpKit < Kit
|
|
253
253
|
person
|
254
254
|
end
|
255
255
|
|
256
|
+
def sync_mailchimp_webhook_cleaned(list_id, data)
|
257
|
+
person = organization.people.find_by_email(data["email"])
|
258
|
+
return if person.nil?
|
259
|
+
|
260
|
+
reason = (data["reason"] == "hard" ? "a hard bounce" : "abuse")
|
261
|
+
person.subscribed_lists.delete(list_id)
|
262
|
+
person.new_note("MailChimp cleaned #{person.email} from #{list_name(list_id)} because of #{reason}.", Time.now, nil, organization_id)
|
263
|
+
puts person.save
|
264
|
+
end
|
265
|
+
|
256
266
|
def sync_mailchimp_webhook_update_person_email(list_id, data)
|
257
267
|
person = organization.people.find_by_email(data["old_email"])
|
258
268
|
return if person.nil? || person.do_not_email?
|
@@ -277,12 +287,7 @@ class MailchimpKit < Kit
|
|
277
287
|
def sync_mailchimp_webhook_member_unsubscribe(list_id, data)
|
278
288
|
person = organization.people.find_by_email(data["email"])
|
279
289
|
return unless person
|
280
|
-
|
281
|
-
:text => "Unsubscribed in MailChimp from #{list_name(list_id)}",
|
282
|
-
:occurred_at => Time.now
|
283
|
-
})
|
284
|
-
note.organization_id = organization_id
|
285
|
-
note.save
|
290
|
+
person.new_note("Unsubscribed in MailChimp from #{list_name(list_id)}", Time.now, nil, organization_id)
|
286
291
|
person.subscribed_lists.delete(list_id)
|
287
292
|
person.save
|
288
293
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class MembershipType < ActiveRecord::Base
|
2
2
|
attr_accessible :name, :price, :fee, :number_of_shows,
|
3
3
|
:plan, :on_sale, :description, :ends_at,
|
4
|
-
:starts_at, :duration, :type, :period, :number_of_tickets
|
4
|
+
:starts_at, :duration, :type, :period, :number_of_tickets, :sales_start_at, :sales_end_at
|
5
5
|
|
6
6
|
belongs_to :organization
|
7
7
|
has_many :memberships
|
@@ -11,6 +11,8 @@ class MembershipType < ActiveRecord::Base
|
|
11
11
|
after_create :create_list_segment
|
12
12
|
|
13
13
|
default_scope order("created_at DESC")
|
14
|
+
|
15
|
+
scope :storefront, where(:on_sale => true).where("sales_start_at < ? or sales_start_at is null", DateTime.now).where("sales_end_at > ? or sales_end_at is null", DateTime.now)
|
14
16
|
scope :on_sale, where(:on_sale => true)
|
15
17
|
|
16
18
|
def membershipize
|
data/app/models/organization.rb
CHANGED
@@ -23,7 +23,7 @@ class Organization < ActiveRecord::Base
|
|
23
23
|
has_many :members
|
24
24
|
has_many :searches
|
25
25
|
|
26
|
-
has_many :users, :through => :user_memberships
|
26
|
+
has_many :users, :through => :user_memberships, :order => 'user_memberships.owner desc'
|
27
27
|
has_many :kits, :before_add => :check_for_duplicates,
|
28
28
|
:after_add => lambda { |u,k| k.activate! unless k.activated? }
|
29
29
|
|
@@ -52,7 +52,7 @@ class Organization < ActiveRecord::Base
|
|
52
52
|
# Returns Tag objects. For an array of tag strings, call unique_tag_strings_for
|
53
53
|
#
|
54
54
|
# This has been supersceded by tags_on and tag_counts_on in acts_as_taggable_on
|
55
|
-
# But those methods have not been added to
|
55
|
+
# But those methods have not been added to an acts_as_taggable_on release yet.
|
56
56
|
#
|
57
57
|
def tags_for(tagged_association)
|
58
58
|
|
@@ -75,8 +75,19 @@ class Organization < ActiveRecord::Base
|
|
75
75
|
self.tags_for(tagged_association).all.map(&:name).uniq
|
76
76
|
end
|
77
77
|
|
78
|
+
#
|
79
|
+
# Will promote user to owner and demote any other owners
|
80
|
+
#
|
81
|
+
def make_owner(user)
|
82
|
+
UserMembership.promote(user, self)
|
83
|
+
end
|
84
|
+
|
85
|
+
def previous_owner
|
86
|
+
users.order('user_memberships.id asc').first
|
87
|
+
end
|
88
|
+
|
78
89
|
def owner
|
79
|
-
|
90
|
+
@owner ||= UserMembership.includes(:user).where(:organization_id => self.id).where(:owner => true).first.try(:user)
|
80
91
|
end
|
81
92
|
|
82
93
|
def dummy
|
data/app/models/person.rb
CHANGED
@@ -14,14 +14,17 @@ class TicketSummary
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class TicketSummary::Row
|
17
|
-
attr_accessor :show, :tickets
|
17
|
+
attr_accessor :show, :tickets, :ticket_type_hash
|
18
18
|
|
19
19
|
def initialize
|
20
20
|
@tickets = []
|
21
|
+
@ticket_type_hash = {}
|
21
22
|
end
|
22
23
|
|
23
24
|
def <<(ticket)
|
24
25
|
@tickets << ticket
|
26
|
+
@ticket_type_hash[ticket.ticket_type] ||= []
|
27
|
+
@ticket_type_hash[ticket.ticket_type] << tickets
|
25
28
|
@show = ticket.show
|
26
29
|
self
|
27
30
|
end
|
data/app/models/user.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
class User < ActiveRecord::Base
|
2
2
|
|
3
3
|
include Ext::DeviseConfiguration
|
4
4
|
include Ext::Integrations::User
|
@@ -11,8 +11,6 @@
|
|
11
11
|
has_many :user_memberships
|
12
12
|
has_many :organizations, :through => :user_memberships
|
13
13
|
|
14
|
-
accepts_nested_attributes_for :user_memberships
|
15
|
-
|
16
14
|
scope :logged_in_more_than_once, where("users.sign_in_count > 1")
|
17
15
|
|
18
16
|
def self.generate_password
|
@@ -8,4 +8,20 @@ class UserMembership < ActiveRecord::Base
|
|
8
8
|
accepts_nested_attributes_for :organization
|
9
9
|
|
10
10
|
validates :user_id, :uniqueness => {:scope => :organization_id}
|
11
|
+
|
12
|
+
#
|
13
|
+
# Will promote new_owner to admin and demote any other owners
|
14
|
+
#
|
15
|
+
def self.promote(new_owner, organization)
|
16
|
+
|
17
|
+
@user_membership = UserMembership.where(:user_id => new_owner.id, :organization_id => organization.id).first
|
18
|
+
|
19
|
+
return false if @user_membership.nil?
|
20
|
+
|
21
|
+
@user_membership.transaction do
|
22
|
+
UserMembership.where(:organization_id => organization.id).update_all(:owner => false)
|
23
|
+
@user_membership.owner = true
|
24
|
+
return @user_membership.save
|
25
|
+
end
|
26
|
+
end
|
11
27
|
end
|
@@ -31,6 +31,8 @@
|
|
31
31
|
=f.label :description, "Description", :class => 'control-label'
|
32
32
|
.controls
|
33
33
|
=f.text_area :description, :class => 'span4', :size => '10x2'
|
34
|
+
%p.muted
|
35
|
+
This description will appear on your storefront as well as on patron receipts.
|
34
36
|
|
35
37
|
.control-group
|
36
38
|
=f.label :availablity, "Availablity", :class => 'control-label'
|
@@ -25,6 +25,14 @@
|
|
25
25
|
|
26
26
|
=render "membership_types/#{@membership_type.class.name.underscore}_form", :f => f
|
27
27
|
|
28
|
+
.control-group
|
29
|
+
= f.label :fee, "Sales Start", :class => 'control-label'
|
30
|
+
.controls
|
31
|
+
= f.text_field :sales_start_at, :value => "#{l @membership_type.sales_start_at, :format => :date_for_input}", :class => :datepicker
|
32
|
+
.control-group
|
33
|
+
= f.label :fee, "Sales End", :class => 'control-label'
|
34
|
+
.controls
|
35
|
+
= f.text_field :sales_end_at, :value => "#{l @membership_type.sales_end_at, :format => :date_for_input}", :class => :datepicker
|
28
36
|
|
29
37
|
.control-group
|
30
38
|
= f.label :on_sale, "On Sale", :class => 'control-label checkbox'
|
@@ -36,4 +44,4 @@
|
|
36
44
|
|
37
45
|
-content_for :custom_js do
|
38
46
|
:javascript
|
39
|
-
touchCurrency();
|
47
|
+
$(document).ready(function() { touchCurrency(); })
|
@@ -1,8 +1,8 @@
|
|
1
1
|
.control-group
|
2
2
|
= f.label :starts_at, "Mebership Begins", :class => 'control-label'
|
3
3
|
.controls
|
4
|
-
= f.text_field :starts_at, :class => :datepicker
|
4
|
+
= f.text_field :starts_at, :value => "#{l @membership_type.starts_at, :format => :date_for_input}", :class => :datepicker
|
5
5
|
.control-group
|
6
6
|
= f.label :ends_at, "Membership Ends", :class => 'control-label'
|
7
7
|
.controls
|
8
|
-
= f.text_field :ends_at, :class => :datepicker
|
8
|
+
= f.text_field :ends_at, :value => "#{l @membership_type.ends_at, :format => :date_for_input}", :class => :datepicker
|
@@ -56,7 +56,8 @@
|
|
56
56
|
.control-group
|
57
57
|
%label Change the expiration of these memberships to:
|
58
58
|
.controls
|
59
|
-
|
59
|
+
.datepicker-alt-field
|
60
|
+
=hidden_field_tag "ends_at", ""
|
60
61
|
.modal-footer
|
61
62
|
=submit_tag "Change Expiration", :class => "btn btn-success"
|
62
63
|
=link_to "Cancel", "#", :class => "btn btn-danger", 'data-dismiss'=>'modal'
|
@@ -17,15 +17,11 @@
|
|
17
17
|
= "Service fee: $#{format("%.2f", (@order.service_fee.to_i/100.0))}"
|
18
18
|
%br
|
19
19
|
|
20
|
-
%p="==================="
|
21
|
-
|
22
20
|
- unless @order.tickets.empty?
|
23
|
-
%h4 Tickets
|
24
21
|
- @order.ticket_summary.rows.each do |row|
|
25
22
|
%p
|
26
|
-
=row.show.event.name
|
27
|
-
|
28
|
-
=l row.show.datetime_local_to_event
|
23
|
+
%h4=row.show.event.name
|
24
|
+
=l row.show.datetime_local_to_event, :format => :long_with_day
|
29
25
|
%br
|
30
26
|
-unless row.show.event.contact_email.blank?
|
31
27
|
="Event contact email: #{row.show.event.contact_email}"
|
@@ -33,19 +29,20 @@
|
|
33
29
|
-unless row.show.event.contact_phone.blank?
|
34
30
|
="Event contact phone: #{row.show.event.contact_phone}"
|
35
31
|
%br
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
%
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
32
|
+
-row.ticket_type_hash.keys.each do |ticket_type|
|
33
|
+
%ul.ticket-list
|
34
|
+
-ticket_type.tickets.each do |ticket|
|
35
|
+
%li
|
36
|
+
%span.price= "#{ticket.ticket_type.name}: $#{format("%.2f", (ticket.sold_price/100.0))}"
|
37
|
+
%li{:style => 'list-style-type:none'}=ticket_type.description
|
38
|
+
|
39
|
+
=link_to image_tag("https://maps.google.com/maps/api/staticmap?size=240x140&maptype=roadmap&markers=color:red|#{row.show.event.venue.address_as_url_query}&sensor=false&zoom=15"), "https://maps.google.com/maps?q=#{row.show.event.venue.address_as_url_query.html_safe}&z=15"
|
40
|
+
%div
|
41
|
+
%strong=row.show.event.venue.name
|
42
|
+
%div=row.show.event.venue.address1
|
43
|
+
-unless row.show.event.venue.address2.blank?
|
44
|
+
%div=row.show.event.venue.address2
|
45
|
+
%div=row.show.event.venue.city_state_zip_as_string
|
49
46
|
|
50
47
|
- unless @order.donations.empty?
|
51
48
|
%h4 Donations
|
@@ -54,3 +51,4 @@
|
|
54
51
|
%li
|
55
52
|
%span.price= "$#{format("%.2f", (item.price/100.00))}:"
|
56
53
|
%span.name= "Donation to #{@order.organization.name_for_donations}"
|
54
|
+
|
@@ -27,9 +27,12 @@ Order confirmation
|
|
27
27
|
-unless row.show.event.venue.street_as_string.blank?
|
28
28
|
="#{row.show.event.venue.street_as_string}"
|
29
29
|
-unless row.show.event.venue.city_state_zip_as_string.blank?
|
30
|
-
="#{row.show.event.venue.city_state_zip_as_string}"
|
31
|
-
|
32
|
-
|
30
|
+
="#{row.show.event.venue.city_state_zip_as_string}"
|
31
|
+
|
32
|
+
-row.ticket_type_hash.keys.each do |ticket_type|
|
33
|
+
-ticket_type.tickets.each do |ticket|
|
34
|
+
= "#{ticket.ticket_type.name}: $#{format("%.2f", (ticket.sold_price/100.0))}"
|
35
|
+
=ticket_type.description
|
33
36
|
|
34
37
|
|
35
38
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddAdminToUserMemberships < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :user_memberships, :owner, :boolean, :default => 0
|
4
|
+
|
5
|
+
Organization.find_each(:include => :users) do |organization|
|
6
|
+
if organization.users.empty?
|
7
|
+
puts "Organization [#{organization.id}] has no owner"
|
8
|
+
else
|
9
|
+
puts "#{organization.id},#{organization.users.first.id}"
|
10
|
+
organization.make_owner(organization.previous_owner)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/artfully_ose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artfully_ose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.0.pre.
|
4
|
+
version: 1.2.0.pre.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artful.ly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -2400,6 +2400,8 @@ files:
|
|
2400
2400
|
- db/migrate/20131013144010_add_type_to_membership_type.rb
|
2401
2401
|
- db/migrate/20131013150230_add_duration_to_membership_type.rb
|
2402
2402
|
- db/migrate/20131013192807_change_number_of_shows_to_tickets.rb
|
2403
|
+
- db/migrate/20131023200559_add_admin_to_user_memberships.rb
|
2404
|
+
- db/migrate/20131029173612_add_sales_start_to_membership_typ.rb
|
2403
2405
|
- lib/artfully_ose/common_abilities.rb
|
2404
2406
|
- lib/artfully_ose/core_ext.rb
|
2405
2407
|
- lib/artfully_ose/engine.rb
|