Merge pull request #18 from iloveitaly/spree-1.1
Multiple Digital Downloads for a Single Variant
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
Spree::LineItem.class_eval do
|
||||
|
||||
has_many :digital_links, :dependent => :destroy
|
||||
|
||||
after_save :create_digital_links, :if => :digital?
|
||||
|
||||
# Is this item digital?
|
||||
def digital?
|
||||
variant.digital?
|
||||
end
|
||||
@@ -15,8 +13,10 @@ Spree::LineItem.class_eval do
|
||||
def create_digital_links
|
||||
digital_links.delete_all
|
||||
|
||||
self.quantity.times do
|
||||
digital_links.create!(:digital => variant.digital)
|
||||
variant.digitals.each do |digital|
|
||||
self.quantity.times do
|
||||
digital_links.create!(:digital => digital)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Spree::Variant.class_eval do
|
||||
|
||||
has_one :digital, :dependent => :destroy
|
||||
has_many :digitals, :dependent => :destroy
|
||||
after_save :destroy_digital, :if => :deleted?
|
||||
|
||||
# Is this variant to be downloaded by the customer?
|
||||
def digital?
|
||||
digital.present?
|
||||
digitals.present?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -1,35 +1,36 @@
|
||||
<div class="yui-g">
|
||||
<div class="yui-u first">
|
||||
<%= form_for(:digital, :url => { :controller => 'digitals', :action => 'create' }, :html => { :multipart => true }) do |f| %>
|
||||
<div>
|
||||
<div>
|
||||
<%= form_for(:digital, :url => { :controller => 'digitals', :action => 'create' }, :html => { :multipart => true }) do |f| %>
|
||||
<fieldset>
|
||||
<legend><%= Spree::Variant.model_name.human %> "<%= variant.options_text %>"</legend>
|
||||
|
||||
<%= f.field_container :current_file do %>
|
||||
<strong><%=t 'current_file' %>:</strong><br/>
|
||||
<% if variant.digital? %>
|
||||
<%= render variant.digital %><%= %>
|
||||
<% else %>
|
||||
<%=t 'none' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<p class="form-buttons">
|
||||
<% if variant.digital? %>
|
||||
<%= link_to t("delete_file"), admin_product_digital_url(:id => variant.digital.id), :confirm => t('delete_file_cofirmation', :filename => variant.digital.attachment_file_name), :method => :delete %>
|
||||
<% else %>
|
||||
<%= f.field_container :current_file do %>
|
||||
<strong><%=t 'files' %>:</strong>
|
||||
<% if variant.digital? %>
|
||||
<ul>
|
||||
<% variant.digitals.each do |digital| %>
|
||||
<li>
|
||||
<%= render digital %>
|
||||
<%= link_to t("delete_file"), admin_product_digital_url(:id => variant.digitals.first.id), :confirm => t('delete_file_cofirmation', :filename => variant.digitals.first.attachment_file_name), :method => :delete %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% else %>
|
||||
<%=t 'none' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= f.field_container :file do %>
|
||||
<%= f.label :file, t("new_file") %> <span class="required">*</span><br/>
|
||||
<%= f.file_field :attachment %>
|
||||
<% end %>
|
||||
|
||||
<%= hidden_field_tag 'digital[variant_id]', variant.id %>
|
||||
<p class="form-buttons">
|
||||
<%= f.field_container :file do %>
|
||||
<%= f.label :file, t("new_file") %> <span class="required">*</span><br/>
|
||||
<%= f.file_field :attachment %>
|
||||
<% end %>
|
||||
|
||||
<%= button t('spree_digital.upload') %>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
<%= hidden_field_tag 'digital[variant_id]', variant.id %>
|
||||
|
||||
<%= button t('spree_digital.upload') %>
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
<% end %>
|
||||
</div>
|
||||
</div><br/>
|
||||
</div>
|
||||
|
||||
@@ -4,27 +4,31 @@ describe Spree::LineItem do
|
||||
|
||||
context "#save" do
|
||||
it "should create one link for a single digital Variant" do
|
||||
digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
line_item = FactoryGirl.create(:line_item, :variant => digital_variant)
|
||||
links = digital_variant.digital.digital_links
|
||||
links = digital_variant.digitals.first.digital_links
|
||||
links.all.size.should == 1
|
||||
links.first.line_item.should == line_item
|
||||
end
|
||||
|
||||
it "should create a link for each quantity of a digital Variant, even when quantity changes later" do
|
||||
digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
line_item = FactoryGirl.create(:line_item, :variant => digital_variant, :quantity => 5)
|
||||
links = digital_variant.digital.digital_links
|
||||
links = digital_variant.digitals.first.digital_links
|
||||
links.all.size.should == 5
|
||||
links.each { |link| link.line_item.should == line_item }
|
||||
|
||||
# quantity update
|
||||
line_item.quantity = 8
|
||||
line_item.save
|
||||
links = digital_variant.digital.digital_links
|
||||
links = digital_variant.digitals.first.digital_links
|
||||
links.all.size.should == 8
|
||||
links.each { |link| link.line_item.should == line_item }
|
||||
end
|
||||
|
||||
it "should create a link for digital variants with multiple digital downloads attached" do
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -9,9 +9,9 @@ describe Spree::Order do
|
||||
context "#add_variant" do
|
||||
it "should add digital Variants of quantity 1 to an order" do
|
||||
order = FactoryGirl.create(:order)
|
||||
order.add_variant variant1 = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
order.add_variant variant2 = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
order.add_variant variant3 = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
order.add_variant variant1 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
order.add_variant variant2 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
order.add_variant variant3 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
order.line_items.first.variant.should == variant1
|
||||
order.line_items.second.variant.should == variant2
|
||||
order.line_items.third.variant.should == variant3
|
||||
@@ -19,7 +19,7 @@ describe Spree::Order do
|
||||
|
||||
it "should handle quantity higher than 1 when adding one specific digital Variant" do
|
||||
order = FactoryGirl.create(:order)
|
||||
digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
order.add_variant digital_variant, 3
|
||||
order.line_items.first.quantity.should == 3
|
||||
order.add_variant digital_variant, 2
|
||||
@@ -31,21 +31,21 @@ describe Spree::Order do
|
||||
it "should understand that all products are digital" do
|
||||
order = FactoryGirl.create(:order)
|
||||
3.times do
|
||||
order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
end
|
||||
order.digital?.should be_true
|
||||
order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital)), 4
|
||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
||||
order.digital?.should be_true
|
||||
end
|
||||
|
||||
it "should understand that not all products are digital" do
|
||||
order = FactoryGirl.create(:order)
|
||||
3.times do
|
||||
order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
|
||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||
end
|
||||
order.add_variant FactoryGirl.create(:variant) # this is the analog product
|
||||
order.digital?.should be_false
|
||||
order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital)), 4
|
||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
||||
order.digital?.should be_false
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user