Class: ActivityBudget

Inherits:
Ekylibre::Record::Base show all
Defined in:
app/models/activity_budget.rb

Overview

Informations

License

Ekylibre - Simple agricultural ERP Copyright (C) 2008-2009 Brice Texier, Thibaud Merigon Copyright (C) 2010-2012 Brice Texier Copyright (C) 2012-2016 Brice Texier, David Joulin

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see www.gnu.org/licenses.

Table: activity_budgets

activity_id  :integer          not null
campaign_id  :integer          not null
created_at   :datetime         not null
creator_id   :integer
currency     :string           not null
id           :integer          not null, primary key
lock_version :integer          default(0), not null
updated_at   :datetime         not null
updater_id   :integer

Instance Method Summary collapse

Methods inherited from Ekylibre::Record::Base

#already_updated?, attr_readonly_with_conditions, #check_if_destroyable?, #check_if_updateable?, columns_definition, complex_scopes, customizable?, #customizable?, #customized?, #destroyable?, #editable?, has_picture, #human_attribute_name, human_attribute_name_with_id, nomenclature_reflections, #old_record, #others, refers_to, scope_with_registration, simple_scopes, #updateable?

Instance Method Details

#any_production?Boolean

Returns:

  • (Boolean)

81
82
83
# File 'app/models/activity_budget.rb', line 81

def any_production?
  productions.any?
end

#computation_methodsObject


91
92
93
94
95
96
97
98
99
100
101
# File 'app/models/activity_budget.rb', line 91

def computation_methods
  list = []
  if productions_size.to_f != 0
    list << :per_working_unit
    list << :per_production
  elsif productions_count.to_f != 0
    list << :per_production
  end
  list << :per_campaign
  list
end

#currency_precisionObject


72
73
74
# File 'app/models/activity_budget.rb', line 72

def currency_precision
  Nomen::Currency.find(currency).precision
end

#duplicate!(activity, campaign) ⇒ Object

Duplicate current budget in given activity and campaign


104
105
106
107
108
109
110
# File 'app/models/activity_budget.rb', line 104

def duplicate!(activity, campaign)
  budget = ActivityBudget.find_or_create_by!(activity: activity, campaign: campaign)
  items.each do |item|
    item.duplicate!(activity_budget: budget)
  end
  budget
end

#expenses_amountObject


60
61
62
# File 'app/models/activity_budget.rb', line 60

def expenses_amount
  expenses.sum(:amount)
end

#nameObject


68
69
70
# File 'app/models/activity_budget.rb', line 68

def name
  tc(:name, activity_name: activity_name, campaign_name: campaign_name)
end

#productionsObject


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

def productions
  return ActivityProduction.none if activity.nil?
  activity.productions.of_campaign(campaign)
end

#productions_sizeObject


85
86
87
# File 'app/models/activity_budget.rb', line 85

def productions_size
  productions.map(&:size_value).sum
end

#revenues_amountObject


64
65
66
# File 'app/models/activity_budget.rb', line 64

def revenues_amount
  revenues.sum(:amount)
end