caboose-cms 0.8.78 → 0.8.79

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.
@@ -1,144 +0,0 @@
1
-
2
- module Caboose
3
- class UserSubscription < ActiveRecord::Base
4
- self.table_name = 'store_user_subscriptions'
5
- self.primary_key = 'id'
6
-
7
- belongs_to :subscription
8
- belongs_to :user
9
- has_many :line_items
10
- attr_accessible :id ,
11
- :subscription_id ,
12
- :user_id ,
13
- :date_started ,
14
- :date_started_full ,
15
- :status
16
-
17
- STATUS_ACTIVE = 'active'
18
- STATUS_INACTIVE = 'inactive'
19
-
20
- def calculate_date_started_full
21
-
22
- s = self.subscription
23
- if !s.start_on_day
24
- self.date_started_full = self.date_started
25
- self.save
26
- end
27
-
28
- s = self.subscription
29
- d = nil
30
- if s.interval == Subscription::INTERVAL_YEARLY
31
- d = Date.new(self.date_started.year, s.start_month, s.start_day)
32
- d = d + 1.year if d < self.date_started
33
- elsif s.interval == Subscription::INTERVAL_MONTHLY
34
- d = Date.new(self.date_started.year, s.start_month, s.start_day)
35
- d = d + 1.month if d < self.date_started
36
- end
37
- self.date_started_full = d
38
- self.save
39
-
40
- end
41
-
42
- def custom_prorate
43
- return eval(self.subscription.prorate_function)
44
- end
45
-
46
- # Verify invoices exist for the entire subscription period up until today
47
- def create_invoices
48
-
49
- self.calculate_date_started_full if self.date_started_full.nil?
50
-
51
- interval = case self.subscription.interval
52
- when Subscription::INTERVAL_MONTHLY then 1.month
53
- when Subscription::INTERVAL_YEARLY then 1.year
54
- end
55
- sc = self.subscription.site.store_config
56
- v = self.subscription.variant
57
- unit_price = v.clearance && v.clearance_price ? v.clearance_price : (v.on_sale? ? v.sale_price : v.price)
58
-
59
- # Special case if the subscription starts on specific day
60
- if self.subscription.start_on_day && (Date.today > self.date_started_full)
61
- li = self.line_items.where("date_starts = ? date_ends = ?", self.date_started, self.date_started_full - 1.day).first
62
- if li.nil?
63
- prorated_unit_price = unit_price + 0.00
64
- if self.subscription.prorate
65
- prorated_unit_price = case self.subscription.prorate_method
66
- when Subscription::PRORATE_METHOD_FLAT then self.subscription.prorate_flat_amount
67
- when Subscription::PRORATE_METHOD_PERCENTAGE then unit_price * ((self.date_started_full - self.date_started).to_f / ((self.date_started_full + interval) - self.date_started_full).to_f)
68
- when Subscription::PRORATE_METHOD_CUSTOM then self.subscription.custom_prorate(self)
69
- end
70
- end
71
- invoice = Caboose::Invoice.create(
72
- :site_id => self.subscription.site_id,
73
- :status => Caboose::Invoice::STATUS_PENDING,
74
- :financial_status => Caboose::Invoice::STATUS_PENDING,
75
- :date_created => DateTime.now,
76
- :payment_terms => sc.default_payment_terms,
77
- :invoice_number => sc.next_invoice_number
78
- )
79
- LineItem.create(
80
- :invoice_id => invoice.id,
81
- :variant_id => v.id,
82
- :quantity => 1,
83
- :unit_price => prorated_unit_price,
84
- :subtotal => prorated_unit_price,
85
- :status => 'pending',
86
- :user_subscription_id => self.id,
87
- :date_starts => d,
88
- :date_ends => d + interval - 1.day
89
- )
90
- invoice.calculate
91
- invoice.save
92
- end
93
- end
94
-
95
- d2 = self.date_started_full + 1.day - 1.day
96
- while d2 <= Date.today do
97
- d2 = d2 + interval
98
- end
99
- d = self.date_started + 1.day - 1.day
100
- while d <= d2 do
101
- # See if an invoice has already been created for today
102
- li = self.line_items.where("date_starts = ? AND date_ends = ?", d, d + interval - 1.day).first
103
- if li.nil?
104
- invoice = Caboose::Invoice.create(
105
- :site_id => self.subscription.site_id,
106
- :customer_id => self.user_id,
107
- :status => Caboose::Invoice::STATUS_PENDING,
108
- :financial_status => Caboose::Invoice::STATUS_PENDING,
109
- :date_created => DateTime.now,
110
- :payment_terms => sc.default_payment_terms,
111
- :invoice_number => sc.next_invoice_number
112
- )
113
- LineItem.create(
114
- :invoice_id => invoice.id,
115
- :variant_id => v.id,
116
- :quantity => 1,
117
- :unit_price => unit_price,
118
- :subtotal => unit_price,
119
- :status => 'pending',
120
- :user_subscription_id => self.id,
121
- :date_starts => d,
122
- :date_ends => d + interval - 1.day
123
- )
124
- invoice.calculate
125
- invoice.save
126
- end
127
- d = d + interval
128
- end
129
- return true
130
- end
131
-
132
- #===========================================================================
133
- # Static methods
134
- #===========================================================================
135
-
136
- def UserSubscription.create_invoices
137
- UserSubscription.where(:status => UserSubscription::STATUS_ACTIVE).all.each do |us|
138
- us.create_invoices
139
- end
140
- end
141
-
142
- end
143
- end
144
-
@@ -1,38 +0,0 @@
1
-
2
- <%= render :partial => 'caboose/users/admin_header' %>
3
-
4
- <p><div id='usersubscription_<%= @user_subscription.id %>_subscription_id' ></div></p>
5
- <p><div id='usersubscription_<%= @user_subscription.id %>_user_id' ></div></p>
6
- <p><div id='usersubscription_<%= @user_subscription.id %>_date_started' ></div></p>
7
- <p><div id='usersubscription_<%= @user_subscription.id %>_date_started_full' ></div></p>
8
- <p><div id='usersubscription_<%= @user_subscription.id %>_status' ></div></p>
9
-
10
- <%= render :partial => 'caboose/users/admin_footer' %>
11
-
12
- <% content_for :caboose_css do %>
13
- <style type='text/css'>
14
- #content input[type=checkbox] { position: relative; }
15
- #roles { height: 200px; overflow-y: scroll; margin-bottom: 20px; }
16
- </style>
17
- <% end %>
18
- <% content_for :caboose_js do %>
19
- <%= javascript_include_tag "caboose/model/all" %>
20
- <script type="text/javascript">
21
-
22
- $(document).ready(function() {
23
- new ModelBinder({
24
- name: 'UserSubcription',
25
- id: <%= @edituser.id %>,
26
- update_url: '/admin/users/<%= @edituser.id %>/subscriptions/<%= @user_subscription.id %>',
27
- authenticity_token: '<%= form_authenticity_token %>',
28
- attributes: [
29
- { name: 'subscription_id' , nice_name: 'Subcription' , type: 'select' , value: <%= raw Caboose.json(@edituser.subscription_id ) %>, width: 400, options_url '/admin/users/<%= @edituser.id %>/subscriptions/subscription-options' },
30
- { name: 'date_started' , nice_name: 'Date Started' , type: 'date' , value: <%= raw Caboose.json(@edituser.date_started ) %>, width: 400 },
31
- { name: 'date_started_full' , nice_name: 'Date Started Full' , type: 'date' , value: <%= raw Caboose.json(@edituser.date_started_full ) %>, width: 400 },
32
- { name: 'status' , nice_name: 'Status' , type: 'select' , value: <%= raw Caboose.json(@edituser.status ) %>, width: 400, options_url '/admin/users/<%= @edituser.id %>/subscriptions/status-options' }
33
- ]
34
- });
35
- });
36
-
37
- </script>
38
- <% end %>
@@ -1,38 +0,0 @@
1
-
2
- <h1>User Subcriptions</h1>
3
-
4
- <div id='usersubscriptions'></div>
5
-
6
- <% content_for :caboose_js do %>
7
- <%= javascript_include_tag 'caboose/model/all' %>
8
- <script type='text/javascript'>
9
-
10
- $(document).ready(function() {
11
- var that = this;
12
- var table = new IndexTable({
13
- form_authenticity_token: '<%= form_authenticity_token %>',
14
- container: 'usersubscriptions',
15
- base_url: '/admin/user-subscriptions',
16
- allow_bulk_edit: true,
17
- allow_bulk_delete: true,
18
- allow_duplicate: false,
19
- allow_advanced_edit: true,
20
- fields: [
21
- { show: true, bulk_edit: true, name: 'subscription_id' , nice_name: 'Subscription' , sort: 'subscription_id' , type: 'select' , value: function(us) { return us.subscription_id }, text: function(us) { return us.subscription ? us.subscription.name : us.subscription_id; }, width: 75, align: 'left', options_url: '/admin/user-subscriptions/subscription-options' },
22
- { show: true, bulk_edit: true, name: 'user_id' , nice_name: 'User' , sort: 'user_id' , type: 'select' , value: function(us) { return us.user_id }, text: function(us) { return us.user ? us.user.first_name + ' ' + us.user.last_name : us.user_id; }, width: 75, align: 'left', options_url: '/admin/user-subscriptions/user-options' },
23
- { show: true, bulk_edit: true, name: 'date_started' , nice_name: 'Date Started' , sort: 'date_started' , type: 'date' , value: function(us) { return us.date_started }, width: 75, align: 'left' },
24
- { show: true, bulk_edit: true, name: 'date_started_full' , nice_name: 'Date Started Full' , sort: 'date_started_full' , type: 'date' , value: function(us) { return us.date_started_full }, width: 75, align: 'left' },
25
- { show: true, bulk_edit: true, name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'select' , value: function(us) { return us.status }, width: 75, align: 'left', options_url: '/admin/user-subscriptions/status-options' }
26
- ],
27
- new_model_text: 'New User Subscription',
28
- no_models_text: "This user doesn't have any subscriptions right now.",
29
- new_model_fields: [
30
- { name: 'subscription_id', nice_name: 'Subscription', type: 'select', width: 400, options_url: '/admin/user-subscriptions/subscription-options' }
31
- ],
32
- bulk_import_fields: ['subscription_id', 'user_id', 'date_started', 'date_started_full', 'status'],
33
- bulk_import_url: '/admin/user-subscriptions/bulk'
34
- });
35
- });
36
-
37
- </script>
38
- <% end %>
@@ -1,39 +0,0 @@
1
-
2
- <%= render :partial => 'caboose/users/admin_header' %>
3
-
4
- <div id='usersubscriptions'></div>
5
-
6
- <%= render :partial => 'caboose/users/admin_footer' %>
7
-
8
- <% content_for :caboose_js do %>
9
- <%= javascript_include_tag 'caboose/model/all' %>
10
- <script type='text/javascript'>
11
-
12
- $(document).ready(function() {
13
- var that = this;
14
- var table = new IndexTable({
15
- form_authenticity_token: '<%= form_authenticity_token %>',
16
- container: 'usersubscriptions',
17
- base_url: '/admin/users/<%= @edituser.id %>/subscriptions',
18
- allow_bulk_edit: true,
19
- allow_bulk_delete: true,
20
- allow_duplicate: false,
21
- allow_advanced_edit: true,
22
- fields: [
23
- { show: true, bulk_edit: true, name: 'subscription_id' , nice_name: 'Subscription' , sort: 'subscription_id' , type: 'select' , value: function(us) { return us.subscription_id }, text: function(us) { return us.subscription ? us.subscription.name : us.subscription_id; }, width: 75, align: 'left', options_url: '/admin/users<%= @edituser.id %>/subscriptions/subscription-options' },
24
- { show: true, bulk_edit: true, name: 'date_started' , nice_name: 'Date Started' , sort: 'date_started' , type: 'date' , value: function(us) { return us.date_started }, width: 75, align: 'left' },
25
- { show: true, bulk_edit: true, name: 'date_started_full' , nice_name: 'Date Started Full' , sort: 'date_started_full' , type: 'date' , value: function(us) { return us.date_started_full }, width: 75, align: 'left' },
26
- { show: true, bulk_edit: true, name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'select' , value: function(us) { return us.status }, width: 75, align: 'left', options_url: '/admin/users<%= @edituser.id %>/subscriptions/status-options' }
27
- ],
28
- new_model_text: 'New User Subscription',
29
- no_models_text: "This user doesn't have any subscriptions right now.",
30
- new_model_fields: [
31
- { name: 'subscription_id', nice_name: 'Subscription', type: 'select', width: 400, options_url: '/admin/users<%= @edituser.id %>/subscriptions/subscription-options' }
32
- ],
33
- bulk_import_fields: ['subscription_id', 'date_started', 'date_started_full', 'status'],
34
- bulk_import_url: '/admin/users/<%= @edituser.id %>/subscriptions/bulk'
35
- });
36
- });
37
-
38
- </script>
39
- <% end %>