Module: OpenProject::ServicePacks::Patches::TimeEntryPatch::InstanceMethods

Defined in:
lib/open_project/service_packs/patches/time_entry_patch.rb

Overview

pseudocode: Find an assignment in effect, if not leave in peace. Then find a rate associated with activity_id and sp in effect. Create an SP_entry with the log entry cost. Subtract the remaining counter of SP to the cost.

Instance Method Summary collapse

Instance Method Details

#get_consumed_units_backObject



66
67
68
69
70
71
72
# File 'lib/open_project/service_packs/patches/time_entry_patch.rb', line 66

def get_consumed_units_back
	sp_entry = self.service_pack_entry
	return if sp_entry.nil?
	service_pack = sp_entry.service_pack
	service_pack.remained_units += sp_entry.units
	service_pack.save
end

#log_consumed_unitsObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/open_project/service_packs/patches/time_entry_patch.rb', line 17

def log_consumed_units
					assignment = project.assigns.where(assigned: true).first
					if assignment.nil?
    self.errors[:base] << "Cannot log time because none SP was assigned"
    raise ActiveRecord::Rollback
  end
					activity_of_time_entry_id = self.activity.parent_id || self.activity.id
					sp_of_project = assignment.service_pack
					rate = sp_of_project.mapping_rates.find_by(activity_id: activity_of_time_entry_id).units_per_hour
					units_cost = rate * self.hours
					# binding.pry
					sp_entry = ServicePackEntry.new(time_entry_id: id, units: units_cost)
					sp_of_project.service_pack_entries << sp_entry
  sp_of_project.remained_units -= units_cost
  sp_of_project.save(context: :consumption)
=begin
  if sp_of_project.remained_units <= 0
    assignment.update(assigned: false)
    admin_users = User.where(admin: true)
    admin_users.each do |admin_user|
      ServicePacksMailer.used_up_email(admin_user, sp_of_project).deliver_now
    end
  end
=end

end

#update_consumed_unitsObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/open_project/service_packs/patches/time_entry_patch.rb', line 45

def update_consumed_units
	# First examine the entry
	# then read the service pack related
	# then recalculate the cost in the entry
	# Update the entry
	# Take the delta and subtract to the remained count of SP.

	sp_entry = self.service_pack_entry
	return if sp_entry.nil?
	sp_of_project = sp_entry.service_pack # the SP entry is binded at the point of creation
	activity_of_time_entry_id = self.activity.parent_id || self.activity.id
	rate = sp_of_project.mapping_rates.find_by(activity_id: activity_of_time_entry_id).units_per_hour
	units_cost = rate * self.hours

	extra_consumption = units_cost - sp_entry.units
	# Keep callbacks for SP. Entries have no callback.
	sp_entry.update(units: units_cost) if extra_consumption != 0
	sp_of_project.remained_units -= extra_consumption
      sp_of_project.save(context: :consumption)
end