Skip to content

Commit 8babc26

Browse files
committed
Refacts EventProcedures TotalAmountCents total/payd/unpaid calculations to remove code repetition
1 parent b1998e8 commit 8babc26

File tree

1 file changed

+8
-40
lines changed

1 file changed

+8
-40
lines changed

app/operations/event_procedures/total_amount_cents.rb

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,54 +9,22 @@ class TotalAmountCents < Actor
99
output :unpaid, type: String
1010

1111
def call
12-
procedures = Procedure.where(id: event_procedures.pluck(:procedure_id))
12+
procedures_by_id = Procedure.where(id: event_procedures.pluck(:procedure_id)).index_by(&:id)
1313

14-
self.total = calculate_total(procedures)
15-
self.payd = calculate_payd(procedures)
16-
self.unpaid = calculate_unpayd(procedures)
14+
self.total = calculate_amount(event_procedures, procedures_by_id)
15+
self.payd = calculate_amount(event_procedures.select(&:payd), procedures_by_id)
16+
self.unpaid = calculate_amount(event_procedures.reject(&:payd), procedures_by_id)
1717
end
1818

1919
def convert_money(amount_cents)
2020
Money.new(amount_cents, "BRL").format
2121
end
2222

23-
def calculate_total(user_procedures)
24-
procedures_by_id = {}
25-
user_procedures.each do |procedure|
26-
procedures_by_id[procedure.id] = procedure
23+
def calculate_amount(filtered_event_procedures, procedures_by_id)
24+
total_cents = filtered_event_procedures.sum do |event_procedure|
25+
procedures_by_id[event_procedure.procedure_id]&.amount_cents.to_i
2726
end
28-
total = 0
29-
event_procedures.each do |event_procedure|
30-
procedure = procedures_by_id[event_procedure.procedure_id]
31-
total += procedure.amount_cents if procedure
32-
end
33-
convert_money(total)
34-
end
35-
36-
def calculate_payd(user_procedures)
37-
procedures_by_id = {}
38-
user_procedures.each do |procedure|
39-
procedures_by_id[procedure.id] = procedure
40-
end
41-
total = 0
42-
event_procedures.select(&:payd).each do |event_procedure|
43-
procedure = procedures_by_id[event_procedure.procedure_id]
44-
total += procedure.amount_cents if procedure
45-
end
46-
convert_money(total)
47-
end
48-
49-
def calculate_unpayd(user_procedures)
50-
procedures_by_id = {}
51-
user_procedures.each do |procedure|
52-
procedures_by_id[procedure.id] = procedure
53-
end
54-
total = 0
55-
event_procedures.reject(&:payd).each do |event_procedure|
56-
procedure = procedures_by_id[event_procedure.procedure_id]
57-
total += procedure.amount_cents if procedure
58-
end
59-
convert_money(total)
27+
convert_money(total_cents)
6028
end
6129
end
6230
end

0 commit comments

Comments
 (0)