<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>db/sample/flexi_shipping_rates.yml</filename>
    </added>
    <added>
      <filename>db/sample/shipping_categories.yml</filename>
    </added>
    <added>
      <filename>db/sample/shipping_methods.yml</filename>
    </added>
    <added>
      <filename>lib/spree/flexi_rate_shipping/calculator.rb</filename>
    </added>
    <added>
      <filename>spec/models/flexi_shipping_calculator_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -16,5 +16,6 @@ class Admin::FlexiShippingRatesController &lt; ApplicationController
     private 
     def load_data     
       @available_categories = ShippingCategory.find :all, :order =&gt; :name
+      @available_zones = Zone.find :all, :order =&gt; :name
     end
 end</diff>
      <filename>app/controllers/admin/flexi_shipping_rates_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
 class FlexiShippingRate &lt; ActiveRecord::Base
   belongs_to :shipping_category
   
+  belongs_to :zone
+  
   validates_presence_of :first_item_price
   validates_presence_of :max_items
   </diff>
      <filename>app/models/flexi_shipping_rate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,12 @@
                               :shipping_category_id, @available_categories, :id, :name, 
                               {}, {&quot;style&quot; =&gt; &quot;width:200px&quot;}) %&gt;&lt;/td&gt;
   &lt;/tr&gt;
+  &lt;tr&gt;
+    &lt;td&gt;&lt;%=t(&quot;Zone&quot;)%&gt;:&lt;/td&gt;
+    &lt;td&gt;&lt;%= collection_select(:flexi_shipping_rate, 
+                              :zone_id, @available_zones, :id, :name, 
+                              {}, {&quot;style&quot; =&gt; &quot;width:200px&quot;}) %&gt;&lt;/td&gt;
+  &lt;/tr&gt;
 	&lt;tr&gt;
     &lt;td&gt;&lt;%=t(&quot;First Item Price&quot;)%&gt;:&lt;/td&gt;
     &lt;td&gt;&lt;%= f.text_field :first_item_price, {&quot;style&quot; =&gt; &quot;width:60px&quot;} %&gt;&lt;/td&gt;</diff>
      <filename>app/views/admin/flexi_shipping_rates/_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@
   &lt;thead&gt;
     &lt;tr&gt;
 	    &lt;th&gt;&lt;%=t(&quot;Shipping Category&quot;)%&gt;&lt;/th&gt;
+      &lt;th&gt;&lt;%=t(&quot;Zone&quot;)%&gt;&lt;/th&gt;
       &lt;th&gt;&lt;%=t(&quot;First Item Price&quot;)%&gt;&lt;/th&gt;
       &lt;th&gt;&lt;%=t(&quot;Additional Item Price&quot;)%&gt;&lt;/th&gt;
       &lt;th&gt;&lt;%=t(&quot;Max. Number of Items&quot;)%&gt;&lt;/th&gt;
@@ -13,6 +14,7 @@
     &lt;% @flexi_shipping_rates.each do |flexi_shipping_rate| %&gt;
       &lt;tr class=&quot;&lt;%= cycle('even', 'odd') %&gt;&quot;&gt;
         &lt;td&gt;&lt;%=flexi_shipping_rate.shipping_category.name %&gt;&lt;/td&gt;
+        &lt;td&gt;&lt;%=flexi_shipping_rate.zone.name %&gt;&lt;/td&gt;
         &lt;td&gt;&lt;%=number_to_currency(flexi_shipping_rate.first_item_price) %&gt;&lt;/td&gt;
         &lt;td&gt;&lt;%=number_to_currency(flexi_shipping_rate.additional_item_price) %&gt;&lt;/td&gt;
         &lt;td&gt;&lt;%=flexi_shipping_rate.max_items %&gt;&lt;/td&gt;</diff>
      <filename>app/views/admin/flexi_shipping_rates/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@ class CreateFlexiShippingRates &lt; ActiveRecord::Migration
   def self.up
     create_table :flexi_shipping_rates do |t|
       t.references :shipping_category
+      t.references :zone
 	    t.decimal :first_item_price, :precision =&gt; 8, :scale =&gt; 2
 	    t.decimal :additional_item_price, :precision =&gt; 8, :scale =&gt; 2
 	    t.integer :max_items, :default =&gt; 0</diff>
      <filename>db/migrate/20081020154802_create_flexi_shipping_rates.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,6 +22,10 @@ class FlexiRateShippingExtension &lt; Spree::Extension
       belongs_to :shipping_category
     end
     
+    Zone.class_eval do
+      has_many :flexi_shipping_rates
+    end
+    
     Admin::ConfigurationsController.class_eval do
       before_filter :add_flexi_rate_links, :only =&gt; :index
       def add_flexi_rate_links
@@ -33,38 +37,4 @@ class FlexiRateShippingExtension &lt; Spree::Extension
   def deactivate
  
   end
-
-  def calculate_shipping(order)
-    rates = {}
-    rate_count = {}
-    order.line_items.each do |li|
-      
-      li.quantity.times do 
-        sc = li.variant.product.shipping_category
-        sc ||= ShippingCategory.new()
-        fsr = sc.flexi_shipping_rate
-        fsr ||= FlexiShippingRate.new(:id =&gt; 'default', :first_item_price =&gt; 0, :max_items =&gt; 1)
-        rate_count.has_key?(fsr.id) ? rate_count[fsr.id] += 1 : rate_count[fsr.id] = 1
-        
-        rates[fsr.id] = 0 unless rates.has_key? fsr.id
-        
-        if rates[fsr.id] == 0
-          #first time to add a product from this flexi-rate
-          rates[fsr.id] +=  fsr.first_item_price
-        else
-          #additional time to add a product from this flexi-rate
-          
-          if rate_count[fsr.id] % fsr.max_items == 1
-            rates[fsr.id] += fsr.first_item_price
-          else
-            rates[fsr.id] += fsr.additional_item_price
-          end
-
-        end
-      end
-      
-    end
-
-    return rates.values.inject(0){|sum, c| sum + c}
-  end
 end
\ No newline at end of file</diff>
      <filename>flexi_rate_shipping_extension.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,129 +14,3 @@ describe FlexiShippingRate do
   end
 
 end
-
-
-describe FlexiRateShippingExtension do
-  before(:each) do
-    @flexi_shipping_rate1 = mock_model(FlexiShippingRate, :first_item_price =&gt; 10.0, :additional_item_price =&gt; 2.0, :max_items =&gt; 6)
-    @shipping_category1 = mock_model(ShippingCategory, :flexi_shipping_rate =&gt; @flexi_shipping_rate1)
-    @product1 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant1 = mock_model(Variant, :product =&gt; @product1)
-
-  end
-
-  it &quot;should calculate shipping with no flexi shipping rate&quot; do
-    @shipping_category1 = mock_model(ShippingCategory, :flexi_shipping_rate =&gt; nil)
-    @product1 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant1 = mock_model(Variant, :product =&gt; @product1)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 1)
-    @line_items = [@line_item1]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 0.0
-  end
-  
-  it &quot;should calculate shipping with one product with no flexi shipping rate&quot; do
-    @no_rate_shipping_category = mock_model(ShippingCategory, :flexi_shipping_rate =&gt; nil)
-    @product1 = mock_model(Product, :shipping_category =&gt; @no_rate_shipping_category)
-    @variant1 = mock_model(Variant, :product =&gt; @product1)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 1)
-        
-    @product2 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant2 = mock_model(Variant, :product =&gt; @product2)
-    @line_item2 = mock_model(LineItem, :variant =&gt; @variant2, :quantity =&gt; 2)
-    
-    @line_items = [@line_item1, @line_item2]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 12.0
-  end
-
-  
-  it &quot;should calculate shipping with one product with no shipping category&quot; do
-    @product1 = mock_model(Product, :shipping_category =&gt; nil)
-    @variant1 = mock_model(Variant, :product =&gt; @product1)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 7)
-
-    @product2 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant2 = mock_model(Variant, :product =&gt; @product2)
-    @line_item2 = mock_model(LineItem, :variant =&gt; @variant2, :quantity =&gt; 2)
-    
-    @line_items = [@line_item1, @line_item2]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 12.0
-  end
-  
-  it &quot;should calculate shipping with no shipping category&quot; do
-    @product1 = mock_model(Product, :shipping_category =&gt; nil)
-    @variant1 = mock_model(Variant, :product =&gt; @product1)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 7)
-    @line_items = [@line_item1]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 0.0
-  end
-
-  it &quot;should calculate shipping correctly using one flexi shipping rate and one product&quot; do
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 7)
-    @line_items = [@line_item1]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 30.0
-  end
-  
-  it &quot;should calculate shipping correctly using one flexi shipping rate and multiple products&quot; do
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 3)
-    
-    @product2 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant2 = mock_model(Variant, :product =&gt; @product2)
-    @line_item2 = mock_model(LineItem, :variant =&gt; @variant2, :quantity =&gt; 2)
-    
-    @product3 = mock_model(Product, :shipping_category =&gt; @shipping_category1)
-    @variant3 = mock_model(Variant, :product =&gt; @product3)
-    @line_item3 = mock_model(LineItem, :variant =&gt; @variant3, :quantity =&gt; 4)
-    
-    @line_items = [@line_item1, @line_item2, @line_item3]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 34.0
-  end
-  
-  it &quot;should calculate shipping correctly using two different flexi shipping rates&quot; do
-   
-    @flexi_shipping_rate2 = mock_model(FlexiShippingRate, :first_item_price =&gt; 50, :additional_item_price =&gt; 10, :max_items =&gt; 10)
-    @shipping_category2 = mock_model(ShippingCategory, :flexi_shipping_rate =&gt; @flexi_shipping_rate2)
-    @product2 = mock_model(Product, :shipping_category =&gt; @shipping_category2)
-    @variant2 = mock_model(Variant, :product =&gt; @product2)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 6)
-    @line_item2 = mock_model(LineItem, :variant =&gt; @variant2, :quantity =&gt; 3)
-    @line_items = [@line_item1, @line_item2]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 90.0
-  end
-  
-  
-  it &quot;should calculate shipping correctly using two different flexi shipping rates, one with no addition_item_price&quot; do
-   
-    @flexi_shipping_rate2 = mock_model(FlexiShippingRate, :first_item_price =&gt; 50, :additional_item_price =&gt; nil, :max_items =&gt; 1)
-    @shipping_category2 = mock_model(ShippingCategory, :flexi_shipping_rate =&gt; @flexi_shipping_rate2)
-    @product2 = mock_model(Product, :shipping_category =&gt; @shipping_category2)
-    @variant2 = mock_model(Variant, :product =&gt; @product2)
-    
-    @line_item1 = mock_model(LineItem, :variant =&gt; @variant1, :quantity =&gt; 6)
-    @line_item2 = mock_model(LineItem, :variant =&gt; @variant2, :quantity =&gt; 1)
-    @line_items = [@line_item1, @line_item2]
-    @order = mock_model(Order, :line_items =&gt; @line_items)
-    
-    FlexiRateShippingExtension.new().calculate_shipping(@order).should == 70.0
-  end
-
-
-end</diff>
      <filename>spec/models/flexi_shipping_rate_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>spec/helpers/admin/flexi_shipping_rates_helper_spec.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>a81c548f3e7fc57001663af4a1e2b3fd7878c364</id>
    </parent>
  </parents>
  <author>
    <name>Brian Quinn</name>
    <email>briandquinn@gmail.com</email>
  </author>
  <url>http://github.com/BDQ/spree-flexi-rate-shipping/commit/430593c4c44e7768fc4cc5d0178eaa1d54e044e6</url>
  <id>430593c4c44e7768fc4cc5d0178eaa1d54e044e6</id>
  <committed-date>2008-10-30T03:58:04-07:00</committed-date>
  <authored-date>2008-10-30T03:58:04-07:00</authored-date>
  <message>Associated FlexiShippingRate with Zone to ensure correct calculation for multiple shipping zone, added sample data</message>
  <tree>0a29dd1d0e70d987975d747a103ee70965519b19</tree>
  <committer>
    <name>Brian Quinn</name>
    <email>briandquinn@gmail.com</email>
  </committer>
</commit>
