Class: GroupOrder

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
FindEachWithOrder
Defined in:
app/models/group_order.rb

Overview

A GroupOrder represents an Order placed by an Ordergroup.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#group_order_articles_attributesObject

Returns the value of attribute group_order_articles_attributes


5
6
7
# File 'app/models/group_order.rb', line 5

def group_order_articles_attributes
  @group_order_articles_attributes
end

Instance Method Details

#load_dataObject

Generate some data for the javascript methods in ordering view


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/models/group_order.rb', line 23

def load_data
  data = {}
  data[:account_balance] = ordergroup.nil? ? BigDecimal.new('+Infinity') : ordergroup.
  data[:available_funds] = ordergroup.nil? ? BigDecimal.new('+Infinity') : ordergroup.get_available_funds(self)

  # load prices and other stuff....
  data[:order_articles] = {}
  order.articles_grouped_by_category.each do |, order_articles|
    order_articles.each do |order_article|

      # Get the result of last time ordering, if possible
      goa = group_order_articles.detect { |goa| goa.order_article_id == order_article.id }

      # Build hash with relevant data
      data[:order_articles][order_article.id] = {
          :price => order_article.article.fc_price,
          :unit => order_article.article.unit_quantity,
          :quantity => (goa ? goa.quantity : 0),
          :others_quantity => order_article.quantity - (goa ? goa.quantity : 0),
          :used_quantity => (goa ? goa.result(:quantity) : 0),
          :tolerance => (goa ? goa.tolerance : 0),
          :others_tolerance => order_article.tolerance - (goa ? goa.tolerance : 0),
          :used_tolerance => (goa ? goa.result(:tolerance) : 0),
          :total_price => (goa ? goa.total_price : 0),
          :missing_units => order_article.missing_units,
          :quantity_available => (order.stockit? ? order_article.article.quantity_available : 0)
      }
    end
  end

  data
end

#ordergroup_nameObject


91
92
93
# File 'app/models/group_order.rb', line 91

def ordergroup_name
  ordergroup ? ordergroup.name : I18n.t('model.group_order.stock_ordergroup_name', :user => updated_by.try(:name) || '?')
end

#save_group_order_articlesObject


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/group_order.rb', line 56

def save_group_order_articles
  for order_article in order.order_articles
    # Find the group_order_article, create a new one if necessary...
    group_order_article = group_order_articles.where(order_article_id: order_article.id).first_or_create

    # Get ordered quantities and update group_order_articles/_quantities...
    if group_order_articles_attributes
      quantities = group_order_articles_attributes.fetch(order_article.id.to_s, {:quantity => 0, :tolerance => 0})
      group_order_article.update_quantities(quantities[:quantity].to_i, quantities[:tolerance].to_i)
    end

    # Also update results for the order_article
    logger.debug "[save_group_order_articles] update order_article.results!"
    order_article.update_results!
  end

  # set attributes to nil to avoid and infinite loop of
end

#save_ordering!Object

Save GroupOrder and updates group_order_articles/quantities accordingly


83
84
85
86
87
88
89
# File 'app/models/group_order.rb', line 83

def save_ordering!
  transaction do
    save!
    save_group_order_articles
    update_price!
  end
end

#update_price!Object

Updates the “price” attribute.


76
77
78
79
# File 'app/models/group_order.rb', line 76

def update_price!
  total = group_order_articles.includes(:order_article => [:article, :article_price]).to_a.sum(&:total_price)
  update_attribute(:price, total)
end