Sha256: 45f8b7d316e901c915372dfe529824794716667b6b25f25300dea6805fd9de74
Contents?: true
Size: 1.91 KB
Versions: 2
Compression:
Stored size: 1.91 KB
Contents
require 'aasm' module ShoppingCart class Order < ApplicationRecord include CustomMethods has_many :order_items, dependent: :destroy belongs_to :user, class_name: ShoppingCart.user_class belongs_to :credit_card, optional: true belongs_to :delivery, optional: true has_one :coupon, dependent: :destroy has_one :shipping, dependent: :destroy has_one :billing, dependent: :destroy accepts_nested_attributes_for :order_items, allow_destroy: true after_validation :update_total include AASM aasm column: :state, whiny_transitions: false do state :in_progress, initial: true state :processing state :in_delivery state :delivered state :canceled event :completed do transitions from: :in_progress, to: :processing end event :sent_to_client do transitions from: :processing, to: :in_delivery end event :delivered do transitions from: :in_delivery, to: :delivered end event :canceled do transitions from: [:processing, :in_delivery], to: :canceled end end def add_item(id, type, quantity = 1) item = order_items.where("productable_id = ? AND productable_type = ?", id, type).first if item item.update_amount(quantity) else order_items.create(quantity: quantity, productable_id: id, productable_type: type) end end def update_total return if errors.any? new_total = order_items.map(&:item_total).sum new_total -= (new_total * coupon.discount / 100) if coupon custom_steps.each do |step| new_total += self.try(step).try(:price) || 0 end self.total = new_total end def destroy_if_orphant self.destroy if order_items.count.zero? end private def custom_steps ShoppingCart.checkout_steps - [:address, :delivery, :payment, :confirm, :complete] end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
shopping-cart-0.1.1 | app/models/shopping_cart/order.rb |
shopping-cart-0.1.0 | app/models/shopping_cart/order.rb |