caboose-cms 0.6.12 → 0.6.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/controllers/caboose/media_categories_controller.rb +7 -0
- data/app/controllers/caboose/media_controller.rb +10 -2
- data/app/controllers/caboose/products_controller.rb +32 -2
- data/app/models/caboose/product.rb +3 -1
- data/app/models/caboose/product_image.rb +5 -2
- data/app/models/caboose/schema.rb +4 -2
- data/app/views/caboose/products/admin_edit_images.html.erb +69 -3
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +48 -0
- metadata +2 -3
- data/app/models/caboose/#Untitled-1# +0 -56
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2U1YjdkM2YxYWNmMWVlNzBiYzc1MDE5ZmNiNWNkMGI3OWU2ZjhkNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmEzN2UyOTVlNDY4OWQ0ZWJkMzBiZTg3ZmU1NWFjNDI3NTE1MDQ5MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2JjNmJmMDA3MjE2OTUwZDFjYjhkMThhNzAzZWEzOWY4ZTU4NDk0NDdjMmE3
|
10
|
+
NGIwOGQ3ZDJhY2UyYzIyMTZiMWE4MTVkN2M5MzIxMmZmOWU0MTU2ZGUzNGVi
|
11
|
+
M2VhZWFhMTY0ZmM0NzE0ZDRkZDI4YTNmZTMwMzNjNGU5YmJjYWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGY0ZjUxNzg0MmNmNTE4MzA5MDhjNzdiNTVjNDhjMDJmZWMyOTBkNjRjOWY5
|
14
|
+
NGVhYTNmYjEzMWIxNDkxZDNlZDY0MmFhODE3Y2RiYzViNTNhZThjMGY5NGNh
|
15
|
+
ZjVmYTRhNjYzOGFmMmQzOWQwOGZkZDRkNzFhOTZiMzFhZTlkOTE=
|
@@ -93,6 +93,13 @@ module Caboose
|
|
93
93
|
m = Media.where(:id => id).first
|
94
94
|
next if m.nil?
|
95
95
|
m.update_attribute(:media_category_id, media_category_id)
|
96
|
+
p = Product.where(:media_category_id => media_category_id).last
|
97
|
+
if p
|
98
|
+
pi = ProductImage.where(:media_id => id).exists? ? ProductImage.where(:media_id => id).first : ProductImage.create(:media_id => id, :product_id => p.id)
|
99
|
+
pi.product_id = p.id
|
100
|
+
pi.save
|
101
|
+
ProductImageVariant.where(:product_image_id => pi.id).destroy_all
|
102
|
+
end
|
96
103
|
end
|
97
104
|
|
98
105
|
render :json => { :success => true }
|
@@ -93,7 +93,8 @@ module Caboose
|
|
93
93
|
# DELETE /admin/media/:id
|
94
94
|
def admin_delete
|
95
95
|
return unless user_is_allowed('media', 'delete')
|
96
|
-
Media.find(params[:id]).destroy
|
96
|
+
Media.find(params[:id]).destroy
|
97
|
+
ProductImage.where(:media_id => params[:id]).destroy_all
|
97
98
|
render :json => { :success => true }
|
98
99
|
end
|
99
100
|
|
@@ -104,6 +105,7 @@ module Caboose
|
|
104
105
|
if ids
|
105
106
|
ids.each do |id|
|
106
107
|
Media.where(:id => id).destroy_all
|
108
|
+
ProductImage.where(:media_id => id).destroy_all
|
107
109
|
end
|
108
110
|
end
|
109
111
|
render :json => { :success => true }
|
@@ -116,7 +118,13 @@ module Caboose
|
|
116
118
|
original_name = params[:name]
|
117
119
|
name = Caboose::Media.upload_name(original_name)
|
118
120
|
m = Media.where(:media_category_id => media_category_id, :original_name => original_name, :name => name).first
|
119
|
-
|
121
|
+
if m.nil?
|
122
|
+
m = Media.create(:media_category_id => media_category_id, :original_name => original_name, :name => name, :processed => false)
|
123
|
+
end
|
124
|
+
p = Product.where(:media_category_id => media_category_id).last
|
125
|
+
if p
|
126
|
+
pi = ProductImage.create(:product_id => p.id, :media_id => m.id)
|
127
|
+
end
|
120
128
|
render :json => { :success => true }
|
121
129
|
end
|
122
130
|
|
@@ -284,7 +284,29 @@ module Caboose
|
|
284
284
|
# GET /admin/products/:id/images
|
285
285
|
def admin_edit_images
|
286
286
|
return if !user_is_allowed('products', 'edit')
|
287
|
-
@product = Product.find(params[:id])
|
287
|
+
@product = Product.find(params[:id])
|
288
|
+
config = YAML.load(File.read(Rails.root.join('config', 'aws.yml')))[Rails.env]
|
289
|
+
access_key = config['access_key_id']
|
290
|
+
secret_key = config['secret_access_key']
|
291
|
+
bucket = config['bucket']
|
292
|
+
policy = {
|
293
|
+
"expiration" => 1.hour.from_now.utc.xmlschema,
|
294
|
+
"conditions" => [
|
295
|
+
{ "bucket" => "#{bucket}-uploads" },
|
296
|
+
{ "acl" => "public-read" },
|
297
|
+
[ "starts-with", "$key", '' ],
|
298
|
+
[ 'starts-with', '$name', '' ],
|
299
|
+
[ 'starts-with', '$Filename', '' ],
|
300
|
+
]
|
301
|
+
}
|
302
|
+
@policy = Base64.encode64(policy.to_json).gsub(/\n/,'')
|
303
|
+
@signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), secret_key, @policy)).gsub("\n","")
|
304
|
+
@s3_upload_url = "https://#{bucket}-uploads.s3.amazonaws.com/"
|
305
|
+
@aws_access_key_id = access_key
|
306
|
+
|
307
|
+
@top_media_category = @product.media_category.parent
|
308
|
+
@media_category = @product.media_category
|
309
|
+
|
288
310
|
render :layout => 'caboose/admin'
|
289
311
|
end
|
290
312
|
|
@@ -341,7 +363,11 @@ module Caboose
|
|
341
363
|
when 'site_id' then product.site_id = value
|
342
364
|
when 'vendor_id' then product.vendor_id = value
|
343
365
|
when 'alternate_id' then product.alternate_id = value
|
344
|
-
when 'title'
|
366
|
+
when 'title'
|
367
|
+
product.title = value
|
368
|
+
c = MediaCategory.where(:id => product.media_category_id).last
|
369
|
+
c.name = value
|
370
|
+
c.save
|
345
371
|
when 'caption' then product.caption = value
|
346
372
|
when 'featured' then product.featured = value
|
347
373
|
when 'description' then product.description = value
|
@@ -409,6 +435,10 @@ module Caboose
|
|
409
435
|
resp.error = "The title cannot be empty."
|
410
436
|
else
|
411
437
|
p = Product.new(:site_id => @site.id, :title => name)
|
438
|
+
mc = MediaCategory.where(:site_id => @site.id).where("parent_id IS NULL").exists? ? MediaCategory.where(:site_id => @site.id).where("parent_id IS NULL").last : MediaCategory.create(:name => "Media", :site_id => @site.id)
|
439
|
+
pc = MediaCategory.where(:name => "Products", :site_id => @site.id).exists? ? MediaCategory.where(:name => "Products", :site_id => @site.id).last : MediaCategory.create(:name => "Products", :site_id => @site.id, :parent_id => mc.id)
|
440
|
+
c = MediaCategory.create(:site_id => @site.id, :name => name, :parent_id => pc.id)
|
441
|
+
p.media_category_id = c.id
|
412
442
|
p.save
|
413
443
|
resp.redirect = "/admin/products/#{p.id}/general"
|
414
444
|
end
|
@@ -4,6 +4,7 @@ module Caboose
|
|
4
4
|
self.primary_key = 'id'
|
5
5
|
|
6
6
|
belongs_to :site
|
7
|
+
belongs_to :media_category
|
7
8
|
belongs_to :stackable_group, :class_name => 'Caboose::StackableGroup'
|
8
9
|
belongs_to :vendor, :class_name => 'Caboose::Vendor'
|
9
10
|
has_many :customizations, :class_name => 'Caboose::Product', :through => :customization_memberships
|
@@ -45,7 +46,8 @@ module Caboose
|
|
45
46
|
:stackable_group_id ,
|
46
47
|
:on_sale ,
|
47
48
|
:allow_gift_wrap ,
|
48
|
-
:gift_wrap_price
|
49
|
+
:gift_wrap_price ,
|
50
|
+
:media_category_id
|
49
51
|
|
50
52
|
STATUS_ACTIVE = 'Active'
|
51
53
|
STATUS_INACTIVE = 'Inactive'
|
@@ -3,6 +3,7 @@ module Caboose
|
|
3
3
|
self.table_name = 'store_product_images'
|
4
4
|
|
5
5
|
belongs_to :product
|
6
|
+
belongs_to :media
|
6
7
|
has_many :product_image_variants
|
7
8
|
has_many :variants, :through => :product_image_variants
|
8
9
|
|
@@ -17,7 +18,8 @@ module Caboose
|
|
17
18
|
:image_updated_at,
|
18
19
|
:square_offset_x,
|
19
20
|
:square_offset_y,
|
20
|
-
:square_scale_factor
|
21
|
+
:square_scale_factor,
|
22
|
+
:media_id
|
21
23
|
|
22
24
|
has_attached_file :image,
|
23
25
|
:path => ':caboose_prefixproducts/:product_id_:id_:style.:extension',
|
@@ -44,7 +46,8 @@ module Caboose
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def url(size) # 'tiny', 'thumb', 'medium', 'large', 'huge'
|
47
|
-
self.image.url(size)
|
49
|
+
return self.media.image.url(size) if !self.media_id.blank?
|
50
|
+
return self.image.url(size)
|
48
51
|
end
|
49
52
|
|
50
53
|
def urls
|
@@ -521,7 +521,8 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
521
521
|
[ :stackable_group_id , :integer ],
|
522
522
|
[ :on_sale , :boolean , { :default => false }],
|
523
523
|
[ :allow_gift_wrap , :boolean , { :default => false }],
|
524
|
-
[ :gift_wrap_price , :decimal , { :precision => 8, :scale => 2 }]
|
524
|
+
[ :gift_wrap_price , :decimal , { :precision => 8, :scale => 2 }],
|
525
|
+
[ :media_category_id , :integer ]
|
525
526
|
],
|
526
527
|
Caboose::ProductImage => [
|
527
528
|
[ :product_id , :integer ],
|
@@ -534,7 +535,8 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
534
535
|
[ :image_updated_at , :datetime ],
|
535
536
|
[ :square_offset_x , :integer ],
|
536
537
|
[ :square_offset_y , :integer ],
|
537
|
-
[ :square_scale_factor , :numeric ]
|
538
|
+
[ :square_scale_factor , :numeric ],
|
539
|
+
[ :media_id , :integer ]
|
538
540
|
],
|
539
541
|
Caboose::ProductImageVariant => [
|
540
542
|
[ :product_image_id , :integer ],
|
@@ -3,7 +3,7 @@ p = @product
|
|
3
3
|
%>
|
4
4
|
<%= render :partial => 'caboose/products/admin_header' %>
|
5
5
|
|
6
|
-
<form action='/admin/products/<%= p.id %>/images' method='post' enctype='multipart/form-data' id='new_image_form' target='new_image_iframe'>
|
6
|
+
<!-- <form action='/admin/products/<%= p.id %>/images' method='post' enctype='multipart/form-data' id='new_image_form' target='new_image_iframe'>
|
7
7
|
<input type='hidden' name='authenticity_token' value="<%= form_authenticity_token %>" />
|
8
8
|
<p><input type='file' name='new_image' id='new_image' />
|
9
9
|
<input type='submit' value='Add Image' onclick='add_image();' /></p>
|
@@ -11,12 +11,75 @@ p = @product
|
|
11
11
|
<div id='new_image_message'></div>
|
12
12
|
<iframe id='new_image_iframe' name='new_image_iframe' style='display: none;'></iframe>
|
13
13
|
<div id='message'></div>
|
14
|
+
-->
|
15
|
+
|
16
|
+
<!-- <p>Upload new product images at the <a href="/admin/media">media browser</a>.</p> -->
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
<h2>Product Images</h2>
|
24
|
+
|
25
|
+
<div id='left_content' style="width:150px;">
|
26
|
+
<!-- <div id='categories'></div> -->
|
27
|
+
<div id='controls'></div>
|
28
|
+
</div>
|
29
|
+
<div id='right_content' style="margin-left:170px;">
|
30
|
+
<div id='uploader'></div>
|
31
|
+
<div id='media'></div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<% content_for :caboose_css do %>
|
35
|
+
<%= stylesheet_link_tag 'caboose/admin_media_index' %>
|
36
|
+
<%= stylesheet_link_tag 'plupload/jquery.ui.plupload/css/jquery.ui.plupload.css' %>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<% content_for :caboose_js do %>
|
40
|
+
<%= javascript_include_tag 'caboose/model/all' %>
|
41
|
+
<%= javascript_include_tag 'caboose/admin_media_index.js' %>
|
42
|
+
<%= javascript_include_tag 'caboose/jquery-ui.drag-multiple.min.js' %>
|
43
|
+
|
44
|
+
<!-- production -->
|
45
|
+
<%= javascript_include_tag 'plupload/plupload.full.min.js' %>
|
46
|
+
<%= javascript_include_tag 'plupload/jquery.ui.plupload/jquery.ui.plupload.js' %>
|
47
|
+
|
48
|
+
<!-- debug
|
49
|
+
<script type="text/javascript" src="/assets/plupload/moxie.js"></script>
|
50
|
+
<script type="text/javascript" src="/assets/plupload/plupload.dev.js"></script>
|
51
|
+
<script type="text/javascript" src="/assets/plupload/jquery.ui.plupload/jquery.ui.plupload.js"></script>
|
52
|
+
-->
|
53
|
+
|
54
|
+
<script type="text/javascript">
|
55
|
+
|
56
|
+
var controller = false;
|
57
|
+
$(document).ready(function() {
|
58
|
+
controller = new MediaController({
|
59
|
+
top_cat_id: <%= raw Caboose.json(@media_category ? @top_media_category.id : false) %>,
|
60
|
+
cat_id: <%= raw Caboose.json(@media_category ? @media_category.id : false) %>,
|
61
|
+
s3_upload_url: '<%= raw @s3_upload_url %>',
|
62
|
+
aws_access_key_id: '<%= raw @aws_access_key_id %>',
|
63
|
+
policy: '<%= raw @policy %>',
|
64
|
+
signature: '<%= raw @signature %>',
|
65
|
+
refresh_unprocessed_images: false
|
66
|
+
});
|
67
|
+
});
|
68
|
+
|
69
|
+
</script>
|
70
|
+
<% end %>
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
<hr style="margin:40px 0 20px 0;"/>
|
75
|
+
|
14
76
|
|
15
77
|
<div id='images'>
|
78
|
+
<h4>Assign Images to Variants</h4>
|
16
79
|
<% if p.product_images.count > 0 %>
|
17
80
|
<ul id='images_list' class='clearfix'>
|
18
81
|
<% p.product_images.reorder(:position).each do |img| %>
|
19
|
-
<% url = img.
|
82
|
+
<% url = img.url(:tiny) %>
|
20
83
|
<li id='img_<%= img.id %>'><div id='img_<%= img.id %>_container'><a href="javascript:select_image(<%= img.id %>);"><img src='<%= url %>' width='75' /></a></div></li>
|
21
84
|
<% end %>
|
22
85
|
</ul>
|
@@ -38,6 +101,9 @@ p = @product
|
|
38
101
|
#images div.selected img { border: #ff3333 4px solid; }
|
39
102
|
#images_list { list-style: none; margin: 0; padding: 0; }
|
40
103
|
#images_list li { list-style: none; margin: 0 10px 10px 0; padding: 0; float: left; }
|
104
|
+
.delete_dropper {
|
105
|
+
margin-top: 0;
|
106
|
+
}
|
41
107
|
</style>
|
42
108
|
<% end %>
|
43
109
|
<% content_for :caboose_js do %>
|
@@ -115,7 +181,7 @@ function select_image(image_id, confirm)
|
|
115
181
|
|
116
182
|
$('#variants').empty().append('<br/>');
|
117
183
|
$('#variants').append($('<div/>').attr('id','delete_message'));
|
118
|
-
|
184
|
+
// $('#variants').append($('<input/>').attr('type','button').val('Delete Image').click(function() { delete_image(image_id); }));
|
119
185
|
$('#variants').append(tbl);
|
120
186
|
}
|
121
187
|
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
@@ -1,6 +1,54 @@
|
|
1
1
|
require "caboose/version"
|
2
2
|
|
3
3
|
namespace :caboose do
|
4
|
+
|
5
|
+
desc "Create media categories for existing products on all sites"
|
6
|
+
task :create_product_media_categories => :environment do
|
7
|
+
sites = Caboose::Site.where(:use_store => true).all.each do |s|
|
8
|
+
puts "Processing categories for " + s.description
|
9
|
+
# Create the parent level Media category if it doesn't exist
|
10
|
+
media_category = Caboose::MediaCategory.where(:name => "Media", :site_id => s.id).where("parent_id IS NULL").exists? ? Caboose::MediaCategory.where(:name => "Media", :site_id => s.id).where("parent_id IS NULL").last : Caboose::MediaCategory.new
|
11
|
+
media_category.name = "Media"
|
12
|
+
media_category.site_id = s.id
|
13
|
+
media_category.save
|
14
|
+
# Create the Products category if it doesn't exist
|
15
|
+
product_category = Caboose::MediaCategory.where(:name => "Products", :site_id => s.id).exists? ? Caboose::MediaCategory.where(:name => "Products", :site_id => s.id).last : Caboose::MediaCategory.new
|
16
|
+
product_category.parent_id = media_category.id
|
17
|
+
product_category.name = "Products"
|
18
|
+
product_category.site_id = s.id
|
19
|
+
product_category.save
|
20
|
+
# Create new category for each product
|
21
|
+
Caboose::Product.where(:site_id => s.id).all.each do |p|
|
22
|
+
puts "Creating media category for " + p.title
|
23
|
+
p_category = Caboose::MediaCategory.where(:name => p.title, :site_id => s.id).exists? ? Caboose::MediaCategory.where(:name => p.title, :site_id => s.id).last : Caboose::MediaCategory.new
|
24
|
+
p_category.name = p.title
|
25
|
+
p_category.parent_id = product_category.id
|
26
|
+
p_category.site_id = s.id
|
27
|
+
p_category.save
|
28
|
+
p.media_category_id = p_category.id
|
29
|
+
p.save
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Migrate product images to media"
|
35
|
+
task :migate_product_images_to_media => :environment do
|
36
|
+
Caboose::ProductImage.where("image_file_name is not null AND media_id IS NULL").order("id DESC").all.each do |product_image|
|
37
|
+
next if product_image.product.nil?
|
38
|
+
puts "Saving media for Product Image " + product_image.id.to_s
|
39
|
+
m = nil
|
40
|
+
m = Caboose::Media.where(:id => product_image.media_id).first
|
41
|
+
m = Caboose::Media.create(:media_category_id => product_image.product.media_category_id) if m.nil?
|
42
|
+
product_image.media_id = m.id
|
43
|
+
product_image.save
|
44
|
+
m.original_name = product_image.image_file_name
|
45
|
+
m.name = Caboose::Media.upload_name(m.original_name)
|
46
|
+
m.image = URI.parse(product_image.image.url(:original))
|
47
|
+
m.processed = true
|
48
|
+
m.save
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
4
52
|
|
5
53
|
desc "Create a new lite site"
|
6
54
|
task :create_site => :environment do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -660,7 +660,6 @@ files:
|
|
660
660
|
- app/mailers/caboose/caboose_mailer.rb
|
661
661
|
- app/mailers/caboose/login_mailer.rb
|
662
662
|
- app/mailers/caboose/orders_mailer.rb
|
663
|
-
- app/models/caboose/#Untitled-1#
|
664
663
|
- app/models/caboose/ab_option.rb
|
665
664
|
- app/models/caboose/ab_testing.rb
|
666
665
|
- app/models/caboose/ab_value.rb
|
@@ -1,56 +0,0 @@
|
|
1
|
-
================================================================================
|
2
|
-
Order packages
|
3
|
-
================================================================================
|
4
|
-
|
5
|
-
# Create a single order package for the order
|
6
|
-
sp = ShippingPackage.where(:site_id => order.site_id).first
|
7
|
-
op = OrderPackage.create(:order_id => order.id, :shipping_package_id => sp.id)
|
8
|
-
|
9
|
-
# Assign the line items to the order package
|
10
|
-
order.line_items.each do |li|
|
11
|
-
li.order_package_id = op.id
|
12
|
-
li.save
|
13
|
-
end
|
14
|
-
|
15
|
-
================================================================================
|
16
|
-
Shipping
|
17
|
-
================================================================================
|
18
|
-
|
19
|
-
sc = store_config
|
20
|
-
sa = order.shipping_address
|
21
|
-
origin = ActiveShipping::Location.new(:country => sc.origin_country, :state => sc.origin_state, :city => sc.origin_city, :zip => sc.origin_zip)
|
22
|
-
destination = ActiveShipping::Location.new(:country => sc.origin_country, :state => sa.state, :city => sa.city, :postal_code => sa.zip)
|
23
|
-
carriers = {}
|
24
|
-
carriers['UPS'] = ActiveShipping::UPS.new(:login => sc.ups_username, :password => sc.ups_password, :key => sc.ups_key, :origin_account => sc.ups_origin_account)
|
25
|
-
carriers['USPS'] = ActiveShipping::USPS.new( :login => sc.usps_username) if order.total < 150
|
26
|
-
|
27
|
-
all_rates = []
|
28
|
-
order.order_packages.all.each do |op|
|
29
|
-
|
30
|
-
flat_rate = true
|
31
|
-
op.line_items do |li|
|
32
|
-
flat_rate = false if !li.variant.flat_rate_shipping
|
33
|
-
end
|
34
|
-
if flat_rate
|
35
|
-
v = op.line_items.first.variant
|
36
|
-
all_rates << { :order_package => op, :rates => [{ :shipping_method => v.flat_rate_shipping_method, :total_price => (v.flat_rate_shipping_single/100) }] }
|
37
|
-
else
|
38
|
-
sp = op.shipping_package
|
39
|
-
package = op.activemerchant_package
|
40
|
-
rates = []
|
41
|
-
carriers.each do |name, carrier|
|
42
|
-
resp = carrier.find_rates(origin, destination, package)
|
43
|
-
resp.rates.sort_by(&:price).each do |rate|
|
44
|
-
sm = ShippingMethod.where( :carrier => name, :service_code => rate.service_code).first
|
45
|
-
sm = ShippingMethod.create(:carrier => name, :service_code => rate.service_code, :service_name => rate.service_name) if sm.nil?
|
46
|
-
next if !sp.uses_shipping_method(sm)
|
47
|
-
price = rate.total_price
|
48
|
-
price = rate.package_rates[0].rate if price.nil? && rate.package_rates && rate.package_rates.count > 0
|
49
|
-
rates << { :shipping_method => sm, :total_price => (price.to_d/100) }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
all_rates << { :order_package => op, :rates => rates }
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
return all_rates
|