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

Sign up to get free protection for your applications and to get access to all the features.
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