Sha256: 08f67a671262295b8ea534de90c558bbd51329cf4a069abb480dffb56e412dbd

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

class TbCommerce::Order < ActiveRecord::Base
  self.table_name = 'tb_commerce_orders'

  scope :search, ->(term){ where('name LIKE ?', "%#{term}%") }

  belongs_to :cart, :inverse_of => :order, :foreign_key => :tb_commerce_cart_id
  has_many :transactions, :inverse_of => :order, :foreign_key => :tb_commerce_order_id
  has_one :captured_transaction, ->{ captured }, :class_name => 'TbCommerce::Transaction', :foreign_key => :tb_commerce_order_id

  validates_presence_of :cart, :name, :address, :city, :state, :postal, :country
  validates_uniqueness_of :cart
  validates :email, :format => {:with => Authlogic::Regex.email, :message => 'should look like an email address.'}
  before_create :set_invoice_number

  define_callbacks :capture
  set_callback :capture, :after, :after_capture

  def description
    return cart.description
  end

  module Status
    OPEN = 'open'
    PLACED = 'placed'
    SHIPPED = 'shipped'
  end

  def full_name
    return name
  end

  def full_address
    return "#{address}, #{city} #{state}, #{postal}, #{country}"
  end

private

  def set_invoice_number
    new_invoice_number = TbCommerce::Order.maximum(:invoice_number) || 1000000
    loop do
      new_invoice_number += 1
      break unless TbCommerce::Order.exists?(:invoice_number => new_invoice_number)
    end
    self.invoice_number = new_invoice_number
  end

  def after_capture
    update_attribute(:status, Status::PLACED)
    cart.update_attribute(:is_completed, true)
    TbCommerce::OrderMailer.order_placed(self).deliver_later
    TbCommerce::OrderMailer.order_confirmation(self).deliver_later
    return true
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tb_commerce-0.0.4 app/models/tb_commerce/order.rb
tb_commerce-0.0.3 app/models/tb_commerce/order.rb
tb_commerce-0.0.2 app/models/tb_commerce/order.rb