Sha256: 7b3217e4994ecfd18fff1e5cbbfce9391cc364d772e5b7e6413bfd6ac74721cc

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

require 'active_support/concern'

module Canmoia
  module Order
    extend ActiveSupport::Concern

    included do
      include ::Workflow
      include CalculationMethods
      # extend  Notification

      # Fields
      # TODO move to Canmoia::Purchase
      field :state, type: Symbol
      field :total, type: Float

      # Relations
      embeds_many :items

      # TODO move to Canmoia::Purchase
      has_one :client, :class_name => "::User"

      # Domain Callbacks
      before_validation :calculate_total, :if => :opened?

      # States
      workflow_column :state
      workflow do

        state :opened do
          event :close , transitions_to: :reviewing
          event :cancel, transitions_to: :canceled
        end

        state :reviewing do
          event :accept, transitions_to: :accepted
          event :reject, transitions_to: :rejected

          event :cancel, transitions_to: :canceled
        end

        state :accepted do
          event :complete, transitions_to: :completed
          event :cancel  , transitions_to: :canceled
        end

        state :rejected do
          event :complete, transitions_to: :completed
          event :cancel  , transitions_to: :canceled
        end

        state :completed
        state :canceled
      end
    end

    module CalculationMethods
      def calculate_total
        self.total = items.sum &:value
      end
    end

    # - on :open   , close: :reviewing, cancel: :canceled, notify: :responsible
    # V on :review, reject: :rejected, accept: :accepted
    # - on :accept, notify: :buyer
    # - on :reject, notify: :buyer
    # - on :cancel, notify: [:buyer, via: :email] }
    # - on :finish, notify: [:buyer, via: :email] }

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
canmoia-0.0.1 lib/canmoia/concerns/order.rb