Sha256: 93b0e44324503b0310ae02a51dadeb0758162044aed0b22e0ae025084088e7e2

Contents?: true

Size: 1.62 KB

Versions: 9

Compression:

Stored size: 1.62 KB

Contents

module MechanizeStore
  class Order < ActiveRecord::Base

    STATUSES = {
        1 => :accomplished,
        2 => :submited, 
        3 => :delivered,
        4 => :canceled
    }

    belongs_to :store

    has_one :payment
    accepts_nested_attributes_for :payment, :allow_destroy => false

    has_one :freight, dependent: :destroy
    accepts_nested_attributes_for :freight, :allow_destroy => true

    has_many :order_items
    accepts_nested_attributes_for :order_items, :allow_destroy => false

    before_create :set_defaults
    after_create :after_create

    validates :payment, :freight, presence: true

    def order_status_str
        return I18n.t(STATUSES[self.order_status], scope: "order_statuses")
    end

    def self.statuses_collection
        statuses_collection = []

        STATUSES.each_pair do |key, value|
            statuses_collection << [I18n.t(value, scope: "order_statuses"), key]
        end

        return statuses_collection
    end

    def set_defaults
        self.order_status = STATUSES.invert[:submited]
    end

    def after_create
        p = self.payment
        p.value = self.total_value
        p.value += self.freight.value if self.freight
        p.save!
    end

    def confirm!
        Order.transaction do
            unless self.generated?           
                paid_in = self.payment.paid_in
                self.generated_at = paid_in ||= DateTime.now
                self.save
            end
        end
    end

    def generated?
        return true if self.generated_at
    end

    def total_value
        self.order_items.collect{|o| o.total }.inject(0){|a, b| a+b }
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
mechanize_store-0.0.18 app/models/mechanize_store/order.rb
mechanize_store-0.0.17 app/models/mechanize_store/order.rb
mechanize_store-0.0.16 app/models/mechanize_store/order.rb
mechanize_store-0.0.15 app/models/mechanize_store/order.rb
mechanize_store-0.0.14 app/models/mechanize_store/order.rb
mechanize_store-0.0.13 app/models/mechanize_store/order.rb
mechanize_store-0.0.12 app/models/mechanize_store/order.rb
mechanize_store-0.0.11 app/models/mechanize_store/order.rb
mechanize_store-0.0.10 app/models/mechanize_store/order.rb