spree_promo 0.30.2 → 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/models/calculator/free_shipping.rb +1 -1
- data/app/models/promotion.rb +7 -4
- data/app/models/promotion/rules/first_order.rb +1 -1
- data/app/models/promotion/rules/item_total.rb +3 -4
- data/app/models/promotion/rules/product.rb +3 -4
- data/app/models/promotion/rules/user.rb +2 -3
- data/lib/spree_promo.rb +4 -0
- data/lib/tasks/install.rake +0 -1
- metadata +13 -11
data/app/models/promotion.rb
CHANGED
@@ -6,14 +6,13 @@ class Promotion < ActiveRecord::Base
|
|
6
6
|
has_many :promotion_rules
|
7
7
|
accepts_nested_attributes_for :promotion_rules
|
8
8
|
alias_method :rules, :promotion_rules
|
9
|
-
|
9
|
+
|
10
10
|
validates :name, :code, :presence => true
|
11
11
|
|
12
12
|
MATCH_POLICIES = %w(all any)
|
13
13
|
|
14
14
|
scope :automatic, where("code IS NULL OR code = ''")
|
15
15
|
|
16
|
-
|
17
16
|
def eligible?(order)
|
18
17
|
!expired? && rules_are_eligible?(order)
|
19
18
|
end
|
@@ -21,7 +20,11 @@ class Promotion < ActiveRecord::Base
|
|
21
20
|
def expired?
|
22
21
|
starts_at && Time.now < starts_at ||
|
23
22
|
expires_at && Time.now > expires_at ||
|
24
|
-
usage_limit &&
|
23
|
+
usage_limit && credits_count >= usage_limit
|
24
|
+
end
|
25
|
+
|
26
|
+
def credits_count
|
27
|
+
credits.with_order.count
|
25
28
|
end
|
26
29
|
|
27
30
|
def rules_are_eligible?(order)
|
@@ -34,7 +37,7 @@ class Promotion < ActiveRecord::Base
|
|
34
37
|
end
|
35
38
|
|
36
39
|
def create_discount(order)
|
37
|
-
return if order.
|
40
|
+
return if order.promotion_credit_exists?(self)
|
38
41
|
if eligible?(order) and amount = calculator.compute(order)
|
39
42
|
amount = order.item_total if amount > order.item_total
|
40
43
|
order.promotion_credits.reload.clear unless combine? and order.promotion_credits.all? { |credit| credit.source.combine? }
|
@@ -3,12 +3,11 @@ class Promotion::Rules::ItemTotal < PromotionRule
|
|
3
3
|
|
4
4
|
preference :amount, :decimal, :default => 100.00
|
5
5
|
preference :operator, :string, :default => '>'
|
6
|
-
|
6
|
+
|
7
7
|
OPERATORS = ['gt', 'gte']
|
8
|
-
|
9
|
-
|
8
|
+
|
10
9
|
def eligible?(order)
|
11
10
|
order.item_total.send(preferred_operator == 'gte' ? :>= : :>, preferred_amount)
|
12
11
|
end
|
13
12
|
|
14
|
-
end
|
13
|
+
end
|
@@ -16,11 +16,10 @@ class Promotion::Rules::Product < PromotionRule
|
|
16
16
|
|
17
17
|
def eligible?(order)
|
18
18
|
return true if eligible_products.empty?
|
19
|
-
order_products = order.line_items.map{|li| li.variant.product}
|
20
19
|
if preferred_match_policy == 'all'
|
21
|
-
eligible_products.all? {|p|
|
20
|
+
eligible_products.all? {|p| order.products.include?(p) }
|
22
21
|
else
|
23
|
-
|
22
|
+
order.products.any? {|p| eligible_products.include?(p) }
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
@@ -38,4 +37,4 @@ class Promotion::Rules::Product < PromotionRule
|
|
38
37
|
self.product_ids = s.to_s.split(',').map(&:strip)
|
39
38
|
end
|
40
39
|
|
41
|
-
end
|
40
|
+
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
class Promotion::Rules::User < PromotionRule
|
2
2
|
belongs_to :user
|
3
3
|
has_and_belongs_to_many :users, :class_name => '::User', :join_table => 'promotion_rules_users', :foreign_key => 'promotion_rule_id'
|
4
|
-
|
4
|
+
|
5
5
|
def eligible?(order)
|
6
6
|
users.none? or users.include?(order.user)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
9
|
def user_ids_string
|
11
10
|
user_ids.join(',')
|
12
11
|
end
|
@@ -15,4 +14,4 @@ class Promotion::Rules::User < PromotionRule
|
|
15
14
|
self.user_ids = s.to_s.split(',').map(&:strip)
|
16
15
|
end
|
17
16
|
|
18
|
-
end
|
17
|
+
end
|
data/lib/spree_promo.rb
CHANGED
@@ -28,6 +28,10 @@ module SpreePromo
|
|
28
28
|
attr_accessor :coupon_code
|
29
29
|
before_save :process_coupon_code, :if => "@coupon_code"
|
30
30
|
|
31
|
+
def promotion_credit_exists?(credit)
|
32
|
+
promotion_credits.reload.detect { |c| c.source_id == credit.id }
|
33
|
+
end
|
34
|
+
|
31
35
|
def process_coupon_code
|
32
36
|
coupon = Promotion.find(:first, :conditions => ["UPPER(code) = ?", @coupon_code.upcase])
|
33
37
|
if coupon
|
data/lib/tasks/install.rake
CHANGED
@@ -11,7 +11,6 @@ namespace :spree_promo do
|
|
11
11
|
task :migrations do
|
12
12
|
source = File.join(File.dirname(__FILE__), '..', '..', 'db')
|
13
13
|
destination = File.join(Rails.root, 'db')
|
14
|
-
puts "INFO: Mirroring assets from #{source} to #{destination}"
|
15
14
|
Spree::FileUtilz.mirror_files(source, destination)
|
16
15
|
end
|
17
16
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_promo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 191
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 40
|
9
|
+
- 0
|
10
|
+
version: 0.40.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David North
|
@@ -15,7 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2010-12-22 00:00:00 -05:00
|
19
|
+
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: spree_core
|
@@ -25,12 +26,12 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - "="
|
27
28
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
29
|
+
hash: 191
|
29
30
|
segments:
|
30
31
|
- 0
|
31
|
-
-
|
32
|
-
-
|
33
|
-
version: 0.
|
32
|
+
- 40
|
33
|
+
- 0
|
34
|
+
version: 0.40.0
|
34
35
|
type: :runtime
|
35
36
|
version_requirements: *id001
|
36
37
|
description: Required dependancy for Spree
|
@@ -81,6 +82,7 @@ files:
|
|
81
82
|
- db/migrate/20100923095305_update_calculable_type_for_promotions.rb
|
82
83
|
- public/javascripts/admin/promotions.js
|
83
84
|
- public/stylesheets/admin/promotions.css
|
85
|
+
has_rdoc: true
|
84
86
|
homepage: http://spreecommerce.com
|
85
87
|
licenses: []
|
86
88
|
|
@@ -112,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
114
|
requirements:
|
113
115
|
- none
|
114
116
|
rubyforge_project: spree_promo
|
115
|
-
rubygems_version: 1.
|
117
|
+
rubygems_version: 1.3.7
|
116
118
|
signing_key:
|
117
119
|
specification_version: 3
|
118
120
|
summary: Promotion functionality for use with Spree.
|