Sha256: 2cc31d6ac115dcff6f8d05528975debd537653c67dc61eb82576d654a0b4aa0d

Contents?: true

Size: 1.27 KB

Versions: 6

Compression:

Stored size: 1.27 KB

Contents

class Shipment < ActiveRecord::Base        
  belongs_to :order
  belongs_to :shipping_method
  belongs_to :address
  has_one    :charge,   :as => :adjustment_source

  before_create :generate_shipment_number
  after_save :transition_order
  after_save :create_shipping_charge
  
  attr_accessor :special_instructions 
  accepts_nested_attributes_for :address
     
  def shipped?
    self.shipped_at
  end
  
  def shipped=(value)
    return unless value == "1" && shipped_at.nil?
    self.shipped_at = Time.now
  end

  def create_shipping_charge
    if shipping_method
      self.charge ||= Charge.create({
          :order => order,
          :secondary_type => "ShippingCharge",
          :description => "#{I18n.t(:shipping)} (#{shipping_method.name})",
          :adjustment_source => self,
        })
    end
  end

  private

  def generate_shipment_number
    record = true
    while record
      random = Array.new(11){rand(9)}.join
      record = Shipment.find(:first, :conditions => ["number = ?", random])
    end
    self.number = random
  end
  
  def transition_order
    # transition order to shipped if all shipments have been shipped
    return unless shipped_at_changed?
    order.shipments.each do |shipment|
      return unless shipment.shipped?
    end
    order.ship!
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
spree-enriquez-0.9.4 app/models/shipment.rb
spree-0.9.4 app/models/shipment.rb
spree-0.9.3 app/models/shipment.rb
spree-0.9.2 app/models/shipment.rb
spree-0.9.1 app/models/shipment.rb
spree-0.9.0 app/models/shipment.rb