artfully_ose 1.2.0.pre.6 → 1.2.0.pre.7

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWQ0MjYyODBmMjg3NzRjZTczNzY1N2U1MDM0NTNiNzU3N2ZlYTZhNw==
4
+ YzQxYTM0Zjg3MzYyNmExODYwMjczYjYwYzQzY2YzZTI1ZjgwNjcyNg==
5
5
  data.tar.gz: !binary |-
6
- MjkwZmFiMmY3Njg0ZmQxMDU3YzBkZDYyMDEyOWJjYzhkNzFlOWJjMg==
6
+ NDU3MzllOGU0Mjc3ODFiMjlkNTI0OWYwZjg4ODc2YjBkZTEwMTZiOQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OWMyYWMwZjU4MDc4N2Q5ZjJjM2M2NzU2OTYzZmZlODY2M2ZjY2FmMDcwMTRj
10
- Y2Q5NTMyNGRjYjQxZmEyNWExOGE2NjlkMDZkNTYzMWZjYTUwMTFjNGEyY2Y0
11
- OGVkZTkzYjBjNTIwMjA0ZjkxOWU5YzEzNDVmYTYxNGE4MTJlMjc=
9
+ OWFkMmYwNWQ1ZDExNjY5NzUwN2Q4ODg4MDUyM2QzNTM4ZTE0ZGEwM2Q4MDA4
10
+ NWEwYTE3MzFiMTA0ZTVjMGE1YWRlM2ExNjY3ZWI4OGUxZTU5ZmU0YWQwYmNl
11
+ YzViY2Y3N2MzODY3MjQzZWMzMDFhODc1MGQ0N2YxYjQxOWM0MGM=
12
12
  data.tar.gz: !binary |-
13
- NDNiYmFmMWIwNmM5ZmZhODE3MzljNTZiMDllMWZlZTZiYWM2NmUxZDg1Zjc4
14
- MjI5ODM0OGNkMDJhNWQ0YmNmOGQzOTU0M2U3NTkxODJlOTA3YjkzNGY1ZDI3
15
- N2UwNDBlNjZiOTA1NmJlZWNmNDMyNjI0OTFjZDVkYThmYjUxN2E=
13
+ YzllOGQzNzMyMGMzM2NiMDJmYTUwOWM1YjM0MGI0OWYxNzRlMWE2YzZjZjI2
14
+ Nzc3ZTc0ODhiZThmNTIyODdjYzYzNjJmNmZjOWI0MTFjOWNhZWZlYzk2ZmI4
15
+ YzhhZTQ0YmY2OThhYjhiZWQzZDc5OGM2MTYwNGI3ZGQ4ZjU5OGE=
@@ -4,7 +4,9 @@ class MembershipTypesController < ArtfullyOseController
4
4
  end
5
5
 
6
6
  def new
7
- @membership_type = MembershipType.new
7
+ with_type_selected do
8
+ @membership_type = Kernel.const_get(params[:type].camelize).new
9
+ end
8
10
  end
9
11
 
10
12
  def create
@@ -17,4 +19,10 @@ class MembershipTypesController < ArtfullyOseController
17
19
  def edit
18
20
  @membership_type = MembershipType.find(params[:id])
19
21
  end
22
+
23
+ private
24
+ def with_type_selected
25
+ render :type and return if params[:type].blank?
26
+ yield
27
+ end
20
28
  end
@@ -3,9 +3,10 @@ class ReportsMailer < ActionMailer::Base
3
3
  layout "mail"
4
4
  add_template_helper(ArtfullyOseHelper)
5
5
 
6
- def daily(tix, donations)
6
+ def daily(tix, donations, memberships)
7
7
  @tix = tix
8
8
  @donations = donations
9
+ @memberships = memberships
9
10
  mail to: @tix.organization.owner.email, bcc: "developers@fracturedatlas.org", subject: "Daily Report for #{@tix.start_date.strftime("%b %d, %Y")}"
10
11
  end
11
12
  end
@@ -0,0 +1,44 @@
1
+ class DailyMembershipReport
2
+ attr_accessor :rows, :start_date, :organization
3
+ extend ::ArtfullyOseHelper
4
+
5
+ def initialize(organization, date=nil)
6
+ @organization = organization
7
+ @start_date = (date || 1.day.ago).in_time_zone(@organization.time_zone).midnight
8
+ @end_date = @start_date + 1.day
9
+ orders = organization.orders.includes(:person, :items => :product)
10
+ orders = orders.csv_not_imported.after(@start_date).before(@end_date) || []
11
+
12
+ @rows = []
13
+ orders.each do |order|
14
+ next if order.memberships.empty?
15
+ next if !order.revenue_applies_to_range(@start_date, @end_date)
16
+
17
+ unique_memberships = order.memberships.collect{|item| item.product.membership_type.name}.uniq
18
+ unique_memberships.each do |membership_type_name|
19
+ @rows << Row.new(order.items.select {|item| item.product.membership_type.name == membership_type_name})
20
+ end
21
+ end
22
+ end
23
+
24
+ def total
25
+ @rows.collect(&:order).sum{|o| o.memberships.sum(&:total_price)}
26
+ end
27
+
28
+ class Row
29
+ attr_accessor :id, :details, :total, :person, :person_id, :order, :quantity, :membership
30
+ def initialize(items)
31
+ @order = items.first.order
32
+ @id = items.first.order.id
33
+ @membership = items.first.product.membership_type.name
34
+ @quantity = items.length
35
+ @total = DailyMembershipReport.number_to_currency(items.sum(&:price).to_f/100)
36
+ @person = items.first.order.person
37
+ @person_id = items.first.order.person.id
38
+ end
39
+
40
+ def calculate_total
41
+ DailyMembershipReport.number_to_currency(@order.memberships.sum(&:price).to_f/100)
42
+ end
43
+ end
44
+ end
@@ -11,8 +11,10 @@ class DailyEmailReportJob
11
11
  Organization.where(:id => org_ids).receiving_sales_email.each do |org|
12
12
  tickets = DailyTicketReport.new(org, date)
13
13
  donations = DailyDonationReport.new(org, date)
14
- next if tickets.rows.empty? && donations.rows.empty? && tickets.exchange_rows.empty?
15
- ReportsMailer.daily(tickets, donations).deliver
14
+ memberships = DailyMembershipReport.new(org, date)
15
+
16
+ next if tickets.rows.empty? && donations.rows.empty? && tickets.exchange_rows.empty? && memberships.rows.empty?
17
+ ReportsMailer.daily(tickets, donations, memberships).deliver
16
18
  end
17
19
  end
18
20
  end
@@ -26,7 +26,7 @@ class Membership < ActiveRecord::Base
26
26
  end
27
27
 
28
28
  def update_member_counters
29
- self.member.count_memberships
29
+ self.member.try(:count_memberships)
30
30
  end
31
31
 
32
32
  # TODO: DJ this. Could be thousands of people.
@@ -1,5 +1,5 @@
1
1
  class MembershipType < ActiveRecord::Base
2
- attr_accessible :name, :price, :fee, :number_of_shows, :plan, :on_sale, :description, :ends_at, :starts_at
2
+ attr_accessible :name, :price, :fee, :number_of_shows, :plan, :on_sale, :description, :ends_at, :starts_at, :duration, :type, :period
3
3
 
4
4
  belongs_to :organization
5
5
  has_many :memberships
@@ -0,0 +1,9 @@
1
+ class RollingMembershipType < MembershipType
2
+ def starts_at
3
+ DateTime.now
4
+ end
5
+
6
+ def ends_at
7
+ DateTime.now + (self.duration.send(self.period))
8
+ end
9
+ end
data/app/models/search.rb CHANGED
@@ -5,8 +5,9 @@ class Search < ActiveRecord::Base
5
5
  belongs_to :membership_type
6
6
  validates_presence_of :organization_id
7
7
 
8
- attr_accessible :zip, :state, :event_id, :tagging,
9
- :person_type, :person_subtype,
8
+ attr_accessible :zip, :state,
9
+ :has_purchased_for, :event_id,
10
+ :tagging, :person_type, :person_subtype,
10
11
  :min_lifetime_value, :max_lifetime_value,
11
12
  :min_donations_amount, :max_donations_amount,
12
13
  :min_donations_date, :max_donations_date, :discount_code,
@@ -34,8 +35,15 @@ class Search < ActiveRecord::Base
34
35
  conditions = []
35
36
 
36
37
  conditions << "Are tagged with #{tagging}." if tagging.present?
37
- conditions << "Bought tickets for #{event.name}." if event_id.present?
38
- conditions << "Purchased #{membership_type.name}" if membership_type_id.present?
38
+
39
+ if event_id.present?
40
+ if has_purchased_for
41
+ conditions << "Purchased tickets for #{event.name}."
42
+ else
43
+ conditions << "Have not purchased tickets for #{event.name}."
44
+ end
45
+ end
46
+
39
47
  if zip.present? || state.present?
40
48
  locations = []
41
49
  locations << state if state.present?
@@ -82,10 +90,7 @@ class Search < ActiveRecord::Base
82
90
  conditions << "Are #{state_str} members"
83
91
  end
84
92
 
85
- if membership_type_id.present?
86
- people = people.joins(:member => [:memberships => [:membership_type]])
87
- people = people.where('membership_types.id = ?', membership_type_id)
88
- end
93
+ conditions << "Are #{membership_type.name} members" if membership_type_id.present?
89
94
 
90
95
  String.new.tap do |s|
91
96
  if conditions.blank?
@@ -128,7 +133,20 @@ class Search < ActiveRecord::Base
128
133
 
129
134
  people = people.tagged_with(tagging) unless tagging.blank?
130
135
  people = people.joins(:address) unless zip.blank? && state.blank?
131
- people = people.joins(:tickets => {:show => :event}).where("events.id" => event_id) unless event_id.blank?
136
+
137
+ if event_id.present?
138
+ people = people.joins("LEFT JOIN `tickets` ON `tickets`.`buyer_id` = `people`.`id` ")
139
+ .joins("LEFT JOIN `shows` ON `shows`.`id` = `tickets`.`show_id` ")
140
+ .joins("LEFT JOIN `events` ON `events`.`id` = `shows`.`event_id`")
141
+
142
+ if has_purchased_for
143
+ people = people.where("events.id" => event_id)
144
+ else
145
+ people = people.where("`events`.`id` <> ? or events.id is null", event_id)
146
+ end
147
+ end
148
+
149
+
132
150
  people = people.where("addresses.zip" => zip.to_s) unless zip.blank?
133
151
  people = people.where("addresses.state" => state) unless state.blank?
134
152
  people = people.where("people.lifetime_value >= ?", min_lifetime_value * 100.0) unless min_lifetime_value.blank?
@@ -155,10 +173,12 @@ class Search < ActiveRecord::Base
155
173
 
156
174
  ### MEMBERSHIP ##
157
175
 
158
- if membership_status.present?
176
+ if searching_membership?
159
177
  #Necessary because we need a left join for the "Not" condition to work
160
178
  people = people.joins('left join members on members.person_id = people.id')
161
-
179
+ end
180
+
181
+ if membership_status.present?
162
182
  people = people.merge(Member.current) if membership_status == "Current"
163
183
  people = people.merge(Member.lapsed) if membership_status == "Lapsed"
164
184
  people = people.merge(Member.past) if membership_status == "Past"
@@ -166,10 +186,24 @@ class Search < ActiveRecord::Base
166
186
  end
167
187
 
168
188
  if membership_type_id.present?
169
- people = people.joins(:member => [:memberships => [:membership_type]])
189
+
190
+ #
191
+ # this really stinks, but activereocrd.joins can't do a left join (needed for :person => :member)
192
+ # Good opportunity for a Rails pull request
193
+ #
194
+ people = people.joins('inner join memberships on members.id = memberships.member_id')
195
+ people = people.joins('inner join membership_types on membership_types.id = memberships.membership_type_id')
196
+
170
197
  people = people.where('membership_types.id = ?', membership_type_id)
171
198
  end
172
199
 
173
200
  people.select(column_names).uniq
174
201
  end
202
+
203
+
204
+
205
+ def searching_membership?
206
+ membership_status.present? ||
207
+ membership_type_id.present?
208
+ end
175
209
  end
@@ -0,0 +1,2 @@
1
+ class SeasonalMembershipType < MembershipType
2
+ end
@@ -1,4 +1,5 @@
1
- =form_for @membership_type, :html => { :class => 'form-horizontal' } do |f|
1
+ =form_for @membership_type, :as => :membership_type, :html => { :class => 'form-horizontal' } do |f|
2
+ =f.hidden_field :type, :value => params[:type]
2
3
  %fieldset
3
4
  .control-group
4
5
  = f.label :name, "Name", :class => 'control-label'
@@ -7,11 +8,7 @@
7
8
  .control-group
8
9
  = f.label :description, "Description", :class => 'control-label'
9
10
  .controls
10
- = f.text_area :description
11
- .control-group
12
- = f.label :plan, "Plan", :class => 'control-label'
13
- .controls
14
- = f.select :plan, ["All In One", "Pay As You Go"]
11
+ = f.text_area :description, :rows => "5"
15
12
  .control-group
16
13
  = f.label :price, "Price", :class => 'control-label'
17
14
  .controls
@@ -21,17 +18,14 @@
21
18
  .controls
22
19
  = f.text_field :fee, :class => 'input-small section-price currency'
23
20
  .control-group
24
- = f.label :number_of_shows, "Number of Shows", :class => 'control-label'
25
- .controls
26
- = f.text_field :number_of_shows
27
- .control-group
28
- = f.label :starts_at, "Mebership Begins", :class => 'control-label'
29
- .controls
30
- = f.text_field :starts_at, :class => :datepicker
31
- .control-group
32
- = f.label :ends_at, "Membership Ends", :class => 'control-label'
21
+ = f.label :number_of_tickets, "Number of Tickets", :class => 'control-label'
33
22
  .controls
34
- = f.text_field :ends_at, :class => :datepicker
23
+ = f.text_field :number_of_tickets, :class => "span1"
24
+
25
+
26
+ =render "membership_types/#{@membership_type.class.name.underscore}_form", :f => f
27
+
28
+
35
29
  .control-group
36
30
  = f.label :on_sale, "On Sale", :class => 'control-label checkbox'
37
31
  .controls
@@ -0,0 +1,5 @@
1
+ .control-group
2
+ = f.label :duration, "Duration", :class => 'control-label'
3
+ .controls
4
+ = f.text_field :duration, :class => "span1"
5
+ = f.select :period, ["Months", "Years"], {}, :class => "span2"
@@ -0,0 +1,8 @@
1
+ .control-group
2
+ = f.label :starts_at, "Mebership Begins", :class => 'control-label'
3
+ .controls
4
+ = f.text_field :starts_at, :class => :datepicker
5
+ .control-group
6
+ = f.label :ends_at, "Membership Ends", :class => 'control-label'
7
+ .controls
8
+ = f.text_field :ends_at, :class => :datepicker
@@ -8,20 +8,18 @@
8
8
 
9
9
  %table.table
10
10
  %tr
11
- %th.right Name
12
- %th.right Plan
11
+ %th Name
13
12
  %th.right Members
13
+ %th.right Tickets
14
14
  %th.right Price
15
15
  %th.right Fee
16
- %th.right Shows
17
16
  %th.right On Sale
18
17
  -@membership_types.each do |membership_type|
19
18
  %tr
20
- %td.right=link_to membership_type.name, edit_membership_type_path(membership_type)
21
- %td.right=membership_type.plan
19
+ %td=link_to membership_type.name, edit_membership_type_path(membership_type)
22
20
  %td.right=link_to membership_type.members.count, segment_path(membership_type.segment)
21
+ %td.right=membership_type.number_of_tickets || "unlimited"
23
22
  %td.right=number_as_cents membership_type.price
24
23
  %td.right=number_as_cents membership_type.fee
25
- %td.right=membership_type.number_of_shows
26
24
  %td.right
27
25
  =check_mark if membership_type.on_sale?
@@ -0,0 +1,16 @@
1
+ .row
2
+ .span8.offset2
3
+ %h3 What type of membership is this?
4
+ .row-fluid
5
+ .span6
6
+ %h4 Season
7
+ %p
8
+ Do your members sign up for a theatrical season or other fixed-expiration?
9
+ .style-selection.center
10
+ =link_to "Setup Seasonal Membership", new_membership_type_path(:type => "SeasonalMembershipType"), :class => :btn
11
+ .span6
12
+ %h4 Rolling
13
+ %p
14
+ Do your members sign up for monthly or yearly memberships?
15
+ .style_selection.center
16
+ =link_to "Setup Rolling Membership", new_membership_type_path(:type => "RollingMembershipType"), :class => :btn
@@ -4,6 +4,14 @@
4
4
  =l @tix.start_date, :format => :date
5
5
  = number_to_currency((@tix.total + @donations.total) / 100.0)
6
6
 
7
+ :css
8
+ th.order { width: 60px; }
9
+ th.customer { width: 140px;}
10
+ th.total { width: 80px; text-align: right }
11
+ td.total { text-align: right }
12
+ td { vertical-align: top}
13
+ table { margin-bottom: 50px }
14
+
7
15
  %h1
8
16
  Daily Total: #{number_to_currency((@tix.total + @donations.total) / 100.0)}
9
17
  %h2
@@ -13,28 +21,30 @@
13
21
  %h3 Tickets: #{number_to_currency(@tix.total / 100.0)}
14
22
  %table.tabular-data{:cellspacing => "0"}
15
23
  %tr
16
- %th Order
17
- %th Total
18
- %th Customer
19
- %th.w200 Details
20
- %th Special Instructions
24
+ %th.order Order
25
+ %th.customer Customer
26
+ %th Details
27
+ %th.total Total
21
28
  - @tix.rows.each do |row|
22
29
  %tr
23
30
  %td.order-number= link_to row.id, order_url(id: row.id)
24
- %td.total= row.total
25
31
  %td= link_to row.person, person_url(id: row.person_id)
26
- %td.w200= row.ticket_details
27
- %td= row.special_instructions
32
+ %td
33
+ = row.ticket_details
34
+ %br
35
+ %br
36
+ = row.special_instructions
37
+ %td.total= row.total
38
+
28
39
  - else
29
40
  %p There were no ticket orders placed.
30
41
 
31
-
32
42
  - if ! @tix.exchange_rows.empty?
33
43
  %h3 Exchanges
34
44
  %table.tabular-data{:cellspacing => "0"}
35
45
  %tr
36
- %th Order
37
- %th Customer
46
+ %th.order Order
47
+ %th.customer Customer
38
48
  %th Details
39
49
  - @tix.exchange_rows.each do |row|
40
50
  %tr
@@ -46,17 +56,39 @@
46
56
  %h3 Donations: #{number_to_currency(@donations.total / 100.0)}
47
57
  %table.tabular-data{:cellspacing => "0"}
48
58
  %tr
49
- %th Order
50
- %th Donation
51
- %th Customer
59
+ %th.order Order
60
+ %th.customer Customer
61
+ %th Details
62
+ %t.total Total
52
63
  - @donations.rows.each do |row|
53
64
  %tr
54
65
  %td.order-number= link_to row.id, order_url(id: row.id)
55
- %td.total= row.total
56
66
  %td= link_to row.person, person_url(id: row.person_id)
67
+ %td
68
+ %td.total= row.total
57
69
  - elsif @tix.organization.has_kit?(:regular_donation)
58
70
  %p There were no donations made.
59
71
 
72
+
73
+ - if !@memberships.rows.empty?
74
+ %h3 Memberships: #{number_to_currency(@memberships.total / 100.0)}
75
+ %table.tabular-data{:cellspacing => "0"}
76
+ %tr
77
+ %th.order Order
78
+ %th.customer Customer
79
+ %th #
80
+ %th Membership
81
+ %th.total Total
82
+ - @memberships.rows.each do |row|
83
+ %tr
84
+ %td.order-number= link_to row.id, order_url(id: row.id)
85
+ %td= link_to row.person, person_url(id: row.person_id)
86
+ %td=row.quantity
87
+ %td=row.membership
88
+ %td.total= row.total
89
+ - else
90
+ %p There were no memberhsips purchased.
91
+
60
92
  - content_for :footer do
61
93
  = render :partial => "fine_print"
62
94
  %p
@@ -29,7 +29,7 @@
29
29
  Events
30
30
  #collapseTwo.accordion-body.collapse
31
31
  .accordion-inner
32
- -# = select_tag :has_has_not, options_for_select(["Purchaed Tickets", "Has Not Purchased"])
32
+ = f.select :has_purchased_for, options_for_select([["Purchaed tickets for", true], ["Have not purchased for", false]], selected: search.has_purchased_for)
33
33
  = f.select :event_id, options_for_select(@event_options, selected: search.event_id), include_blank: ""
34
34
 
35
35
  .accordion-group
@@ -99,7 +99,7 @@
99
99
  Type
100
100
  #collapseEight.accordion-body.collapse
101
101
  .accordion-inner
102
- = f.select :membership_type_id, options_from_collection_for_select(@membership_types, 'id', 'name', @search.membership_type), include_blank: ""
102
+ = f.select :membership_type_id, options_from_collection_for_select(@membership_types, 'id', 'name', @search.membership_type_id), include_blank: ""
103
103
 
104
104
  / .accordion-group
105
105
  / .accordion-heading
@@ -23,7 +23,7 @@
23
23
  %br
24
24
  %br
25
25
  .section
26
- = form_for membership_type, :url => store_order_path(@store_organization.cached_slug), :method => :post do |f|
26
+ = form_for membership_type, :as => :membership_type, :url => store_order_path(@store_organization.cached_slug), :method => :post do |f|
27
27
  = f.hidden_field :id
28
28
  = select_tag :quantity, options_for_select((1..6).to_a.map {|i| [pluralize(i, "#{membership_type.name} Membership"), i]})
29
29
  = f.submit 'Add to cart', :class => 'btn btn-primary', :style => 'margin-top: -10px'
data/config/routes.rb CHANGED
@@ -15,6 +15,8 @@ Rails.application.routes.draw do
15
15
  namespace :store do
16
16
  resources :events, :only => [:show, :index]
17
17
  resources :memberships, :only => :index
18
+ resources :rolling_membership_types, :controller => :membership_types
19
+ resources :seasonal_membership_types, :controller => :membership_types
18
20
  resources :shows, :only => :show
19
21
  resource :checkout, :only => :create
20
22
 
@@ -221,6 +223,8 @@ Rails.application.routes.draw do
221
223
  resources :comps, :only => [ :new, :create ]
222
224
  resources :merges, :only => [ :new, :create ]
223
225
  resources :membership_types
226
+ resources :rolling_membership_types, :controller => :membership_types
227
+ resources :seasonal_membership_types, :controller => :membership_types
224
228
  resources :membership_awards, :only => :create
225
229
 
226
230
  resources :imports do
@@ -0,0 +1,5 @@
1
+ class AddPurchasedToSearches < ActiveRecord::Migration
2
+ def change
3
+ add_column :searches, :has_purchased_for, :boolean, :default => true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddTypeToMembershipType < ActiveRecord::Migration
2
+ def change
3
+ add_column :membership_types, :type, :string, :default => "SeasonalMembershipType"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddDurationToMembershipType < ActiveRecord::Migration
2
+ def change
3
+ add_column :membership_types, :duration, :integer
4
+ add_column :membership_types, :period, :string
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeNumberOfShowsToTickets < ActiveRecord::Migration
2
+ def change
3
+ rename_column :membership_types, :number_of_shows, :number_of_tickets
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module ArtfullyOse
2
- VERSION = "1.2.0.pre.6"
2
+ VERSION = "1.2.0.pre.7"
3
3
  end
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.6
4
+ version: 1.2.0.pre.7
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-10 00:00:00.000000000 Z
11
+ date: 2013-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -1937,6 +1937,7 @@ files:
1937
1937
  - app/models/company.rb
1938
1938
  - app/models/contribution.rb
1939
1939
  - app/models/daily_donation_report.rb
1940
+ - app/models/daily_membership_report.rb
1940
1941
  - app/models/daily_ticket_report.rb
1941
1942
  - app/models/database_views/item_view.rb
1942
1943
  - app/models/database_views/order_view.rb
@@ -2016,9 +2017,11 @@ files:
2016
2017
  - app/models/phone.rb
2017
2018
  - app/models/refund.rb
2018
2019
  - app/models/return.rb
2020
+ - app/models/rolling_membership_type.rb
2019
2021
  - app/models/sale.rb
2020
2022
  - app/models/sale_search.rb
2021
2023
  - app/models/search.rb
2024
+ - app/models/seasonal_membership_type.rb
2022
2025
  - app/models/section.rb
2023
2026
  - app/models/section_summary.rb
2024
2027
  - app/models/segment.rb
@@ -2156,9 +2159,12 @@ files:
2156
2159
  - app/views/membership_awards/create.html.haml
2157
2160
  - app/views/membership_awards/new.html.haml
2158
2161
  - app/views/membership_types/_form.html.haml
2162
+ - app/views/membership_types/_rolling_membership_type_form.html.haml
2163
+ - app/views/membership_types/_seasonal_membership_type_form.html.haml
2159
2164
  - app/views/membership_types/edit.html.haml
2160
2165
  - app/views/membership_types/index.html.haml
2161
2166
  - app/views/membership_types/new.html.haml
2167
+ - app/views/membership_types/type.html.haml
2162
2168
  - app/views/memberships/index.html.haml
2163
2169
  - app/views/merges/_merge_preview_person.html.haml
2164
2170
  - app/views/merges/find_person.html.haml
@@ -2389,6 +2395,10 @@ files:
2389
2395
  - db/migrate/20131002191646_create_show_stats_view.rb
2390
2396
  - db/migrate/20131007141421_add_counters_to_member.rb
2391
2397
  - db/migrate/20131007144456_remove_expires_at_from_membership.rb
2398
+ - db/migrate/20131011154027_add_purchased_to_searches.rb
2399
+ - db/migrate/20131013144010_add_type_to_membership_type.rb
2400
+ - db/migrate/20131013150230_add_duration_to_membership_type.rb
2401
+ - db/migrate/20131013192807_change_number_of_shows_to_tickets.rb
2392
2402
  - lib/artfully_ose/common_abilities.rb
2393
2403
  - lib/artfully_ose/core_ext.rb
2394
2404
  - lib/artfully_ose/engine.rb