@@ -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
112104end
0 commit comments