Skip to content

Commit 685b192

Browse files
committed
Simplify tax addition logic
1 parent 41b2ebc commit 685b192

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

lib/croatia/fiscalizer/xml_builder.rb

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,43 +57,24 @@ def invoice_request(invoice:, message_id:, timezone: Croatia::Fiscalizer::TZ, **
5757
tax_breakdown = invoice.tax_breakdown
5858

5959
if tax_breakdown.key?(:value_added_tax)
60-
payload.add_element("tns:Pdv").tap do |vat|
61-
tax_breakdown[:value_added_tax].each do |breakdown|
62-
vat.add_element("tns:Porez").tap do |tax|
63-
tax.add_element("tns:Stopa").text = (breakdown[:rate] * 100.0).to_f.to_s
64-
tax.add_element("tns:Osnovica").text = breakdown[:base].to_f.to_s
65-
tax.add_element("tns:Iznos").text = breakdown[:tax].to_f.to_s
66-
end
67-
end
60+
payload.add_element("tns:Pdv").tap do |taxes|
61+
add_tax_breakdowns(taxes, tax_breakdown[:value_added_tax], name: false)
6862
end
6963
end
7064

7165
if tax_breakdown.key?(:consumption_tax)
72-
payload.add_element("tns:Pnp").tap do |vat|
73-
tax_breakdown[:consumption_tax].each do |breakdown|
74-
vat.add_element("tns:Porez").tap do |tax|
75-
tax.add_element("tns:Stopa").text = (breakdown[:rate] * 100.0).to_f.to_s
76-
tax.add_element("tns:Osnovica").text = breakdown[:base].to_f.to_s
77-
tax.add_element("tns:Iznos").text = breakdown[:tax].to_f.to_s
78-
end
79-
end
66+
payload.add_element("tns:Pnp").tap do |taxes|
67+
add_tax_breakdowns(taxes, tax_breakdown[:consumption_tax], name: false)
8068
end
8169
end
8270

8371
if tax_breakdown.key?(:other)
84-
payload.add_element("tns:OstaliPor").tap do |vat|
85-
tax_breakdown[:other].each do |breakdown|
86-
vat.add_element("tns:Porez").tap do |tax|
87-
tax.add_element("tns:Naziv").text = breakdown[:name]
88-
tax.add_element("tns:Stopa").text = (breakdown[:rate] * 100.0).to_f.to_s
89-
tax.add_element("tns:Osnovica").text = breakdown[:base].to_f.to_s
90-
tax.add_element("tns:Iznos").text = breakdown[:tax].to_f.to_s
91-
end
92-
end
72+
payload.add_element("tns:OstaliPor").tap do |taxes|
73+
add_tax_breakdowns(taxes, tax_breakdown[:other], name: true)
9374
end
9475
end
9576

96-
# TODO: Add taxes
77+
# TODO: Margins and surcharges
9778

9879
payload.add_element("tns:IznosOslobPdv").text = invoice.vat_exempt_amount.to_f.to_s if invoice.vat_exempt_amount.positive?
9980
payload.add_element("tns:IznosNePodlOpor").text = invoice.amount_outside_vat_scope.to_f.to_s if invoice.amount_outside_vat_scope.positive?
@@ -108,5 +89,16 @@ def invoice_request(invoice:, message_id:, timezone: Croatia::Fiscalizer::TZ, **
10889
end
10990
end
11091
end
92+
93+
def add_tax_breakdowns(taxes, breakdowns, name: false)
94+
breakdowns.each do |breakdown|
95+
taxes.add_element("tns:Porez").tap do |tax|
96+
tax.add_element("tns:Naziv").text = breakdown[:name] if name
97+
tax.add_element("tns:Stopa").text = (breakdown[:rate] * 100.0).to_f.to_s
98+
tax.add_element("tns:Osnovica").text = breakdown[:base].to_f.to_s
99+
tax.add_element("tns:Iznos").text = breakdown[:tax].to_f.to_s
100+
end
101+
end
102+
end
111103
end
112104
end

0 commit comments

Comments
 (0)