Skip to content

Commit 62fda84

Browse files
authored
Merge pull request #245 from espoo-dev/feat-eventprocedure-amoutcents-filter
Feature EventProcedure TotalAmoutCents filter
2 parents 4d4f7bb + 5d6290a commit 62fda84

File tree

8 files changed

+31
-118
lines changed

8 files changed

+31
-118
lines changed

app/controllers/api/v1/event_procedures_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def index
1313
params: event_procedure_permitted_query_params
1414
).event_procedures
1515

16-
total_amount_cents = EventProcedures::TotalAmountCents.call(total_amount_cents_params)
16+
total_amount_cents = EventProcedures::TotalAmountCents.call(event_procedures: event_procedures)
1717

1818
render json: {
1919
total: total_amount_cents.total,

app/controllers/api/v1/pdf_reports_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def event_procedures_pdf
3636
scope: authorized_scope,
3737
params: permitted_query_params
3838
).event_procedures
39-
total_amount_cents = EventProcedures::TotalAmountCents.call(total_amount_cents_params)
39+
total_amount_cents = EventProcedures::TotalAmountCents.call(event_procedures: event_procedures)
4040

4141
PdfGeneratorService.new(
4242
relation: event_procedures,

app/operations/event_procedures/total_amount_cents.rb

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,29 @@
22

33
module EventProcedures
44
class TotalAmountCents < Actor
5-
input :user_id, type: Integer
6-
input :month, type: String, allow_nil: true
7-
input :year, type: String, allow_nil: true
5+
input :event_procedures
86

97
output :total, type: String
108
output :payd, type: String
119
output :unpaid, type: String
1210

1311
def call
14-
self.total = calculate_total
15-
self.payd = calculate_paid
16-
self.unpaid = calculate_unpaid
17-
end
18-
19-
private
12+
procedures_by_id = Procedure.where(id: event_procedures.pluck(:procedure_id)).index_by(&:id)
2013

21-
def calculate_total
22-
Money.new(SumAmountQuery.call(user_id:, month:, year:), "BRL").format
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)
2317
end
2418

25-
def calculate_paid
26-
Money.new(SumAmountQuery.call(user_id:, month:, year:, payd: true), "BRL").format
19+
def convert_money(amount_cents)
20+
Money.new(amount_cents, "BRL").format
2721
end
2822

29-
def calculate_unpaid
30-
Money.new(SumAmountQuery.call(user_id:, month:, year:, payd: false), "BRL").format
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
26+
end
27+
convert_money(total_cents)
3128
end
3229
end
3330
end

app/queries/event_procedures/sum_amount_query.rb

Lines changed: 0 additions & 22 deletions
This file was deleted.

spec/operations/event_procedures/total_amount_cents_spec.rb

Lines changed: 13 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,91 +6,31 @@
66
describe ".result" do
77
it "is successful" do
88
user = create(:user)
9-
10-
expect(described_class.result(user_id: user.id, month: nil, year: nil)).to be_success
9+
event_procedure = create(:event_procedure, user_id: user.id)
10+
expect(described_class.result(event_procedures: [event_procedure])).to be_success
1111
end
1212

1313
it "returns the amount_cents total, paid and unpaid of event_procedures" do
1414
user = create(:user)
15-
_payd_amount_cents = create_list(
15+
procedure_5000 = create(:procedure, amount_cents: 5000)
16+
procedure_2000 = create(:procedure, amount_cents: 2000)
17+
payd_amount_cents = create_list(
1618
:event_procedure, 3,
17-
procedure: create(:procedure, amount_cents: 5000),
19+
procedure: procedure_5000,
1820
user: user,
1921
payd: true
2022
)
21-
_unpayd_event_procedure = create(
22-
:event_procedure,
23-
procedure: create(:procedure, amount_cents: 2000),
23+
unpayd_event_procedure = create_list(
24+
:event_procedure, 2,
25+
procedure: procedure_2000,
2426
user: user,
2527
payd: false
2628
)
27-
total_amount_cents = described_class.call(user_id: user.id, month: nil, year: nil)
28-
29-
expect(total_amount_cents.total).to eq("R$170.00")
29+
event_procedures = payd_amount_cents + unpayd_event_procedure
30+
total_amount_cents = described_class.call(event_procedures: event_procedures)
31+
expect(total_amount_cents.total).to eq("R$190.00")
3032
expect(total_amount_cents.payd).to eq("R$150.00")
31-
expect(total_amount_cents.unpaid).to eq("R$20.00")
32-
end
33-
34-
it "calculates the total, payd, and unpaid amounts for a specific month" do
35-
user = create(:user)
36-
procedure_1000 = create(:procedure, amount_cents: 1000)
37-
procedure_2000 = create(:procedure, amount_cents: 2000)
38-
39-
_event_procedure_jan = create(
40-
:event_procedure, procedure: procedure_1000,
41-
date: "31/01/2023",
42-
payd: true,
43-
user: user
44-
)
45-
_payd_event_procedure_feb = create(
46-
:event_procedure, procedure: procedure_2000,
47-
date: "25/02/2023",
48-
payd: true,
49-
user: user
50-
)
51-
_unpayd_event_procedure_feb = create(
52-
:event_procedure, procedure: procedure_1000,
53-
date: "25/02/2023",
54-
payd: false,
55-
user: user
56-
)
57-
58-
total_amount_cents = described_class.call(user_id: user.id, month: "2", year: nil)
59-
60-
expect(total_amount_cents.total).to eq("R$30.00")
61-
expect(total_amount_cents.payd).to eq("R$20.00")
62-
expect(total_amount_cents.unpaid).to eq("R$10.00")
63-
end
64-
65-
it "calculates the total, payd, and unpaid amounts for a specific year" do
66-
user = create(:user)
67-
procedure_1000 = create(:procedure, amount_cents: 1000)
68-
procedure_2000 = create(:procedure, amount_cents: 2000)
69-
70-
_event_procedure_2023 = create(
71-
:event_procedure, procedure: procedure_1000,
72-
date: "31/01/2023",
73-
payd: true,
74-
user: user
75-
)
76-
_payd_event_procedure_2024 = create(
77-
:event_procedure, procedure: procedure_2000,
78-
date: "25/02/2024",
79-
payd: true,
80-
user: user
81-
)
82-
_unpayd_event_procedure_2024 = create(
83-
:event_procedure, procedure: procedure_1000,
84-
date: "25/02/2024",
85-
payd: false,
86-
user: user
87-
)
88-
89-
total_amount_cents = described_class.call(user_id: user.id, month: nil, year: "2024")
90-
91-
expect(total_amount_cents.total).to eq("R$30.00")
92-
expect(total_amount_cents.payd).to eq("R$20.00")
93-
expect(total_amount_cents.unpaid).to eq("R$10.00")
33+
expect(total_amount_cents.unpaid).to eq("R$40.00")
9434
end
9535
end
9636
end

spec/pdfs/event_procedures_report_pdf_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
it "generates a report with the correct content" do
77
user = create(:user)
88
pdf = Prawn::Document.new
9-
amount = EventProcedures::TotalAmountCents.call(user_id: user.id, month: nil, year: nil)
109
event_procedures = create_list(:event_procedure, 3, user_id: user.id)
10+
amount = EventProcedures::TotalAmountCents.call(event_procedures: event_procedures)
1111

1212
described_class.new(
1313
pdf: pdf, amount: amount, items: event_procedures, title: "Procedimentos", email: user.email

spec/pdfs/footer_pdf_spec.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
RSpec.describe FooterPdf, type: :pdf do
66
it "generates a footer with the correct content" do
77
user = create(:user)
8-
create_list(:event_procedure, 3, user_id: user.id)
8+
event_procedures = create_list(:event_procedure, 3, user_id: user.id)
99
total_amount_cents = EventProcedures::TotalAmountCents.call(
10-
user_id: user.id,
11-
month: nil,
12-
year: nil
10+
event_procedures: event_procedures
1311
)
1412
pdf = Prawn::Document.new
1513

spec/services/pdf_generator_service_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
it "generates event_procedures pdf" do
99
user = create(:user)
1010
event_procedures = create_list(:event_procedure, 11)
11-
amount = EventProcedures::TotalAmountCents.call(user_id: event_procedures.first.user_id, month: nil, year: nil)
11+
amount = EventProcedures::TotalAmountCents.call(event_procedures: event_procedures)
1212
pdf = described_class.new(
1313
relation: event_procedures, amount: amount, entity_name: "event_procedures", email: user.email
1414
).generate_pdf

0 commit comments

Comments
 (0)