Skip to content

Commit

Permalink
feat: render xml
Browse files Browse the repository at this point in the history
  • Loading branch information
mrnagydavid committed Nov 12, 2023
1 parent 3eec725 commit 3fe6010
Show file tree
Hide file tree
Showing 33 changed files with 1,059 additions and 272 deletions.
3 changes: 1 addition & 2 deletions lib/modules/create_invoice.ex
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice do
alias ExSzamlazzHu.Modules.CreateInvoice.InvoiceData
alias ExSzamlazzHu.Modules.CreateInvoice.XMLBuilder

def run(params) do
params
|> InvoiceData.parse()
|> IO.inspect()

Check warning on line 7 in lib/modules/create_invoice.ex

View workflow job for this annotation

GitHub Actions / Build and test

There should be no calls to IO.inspect/1.
|> XMLBuilder.build()
|> InvoiceData.to_xml()
|> IO.inspect()

Check warning on line 9 in lib/modules/create_invoice.ex

View workflow job for this annotation

GitHub Actions / Build and test

There should be no calls to IO.inspect/1.
end
end
60 changes: 37 additions & 23 deletions lib/modules/create_invoice/customer.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.Customer do
alias ExSzamlazzHu.Modules.CreateInvoice.CustomerLedger
alias ExSzamlazzHu.Utils.StructToXML

@type t :: %__MODULE__{}

Expand Down Expand Up @@ -37,28 +38,41 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.Customer do
def parse(nil), do: nil

def parse(params) do
%__MODULE__{
nev: params[:nev],
orszag: params[:orszag],
irsz: params[:irsz],
telepules: params[:telepules],
cim: params[:cim],
email: params[:email],
sendEmail: params[:sendEmail],
adoalany: params[:adoalany],
adoszam: params[:adoszam],
csoportazonosito: params[:csoportazonosito],
adoszamEU: params[:adoszamEU],
postazasiNev: params[:postazasiNev],
postazasiOrszag: params[:postazasiOrszag],
postazasiIrsz: params[:postazasiIrsz],
postazasiTelepules: params[:postazasiTelepules],
postazasiCim: params[:postazasiCim],
vevoFokonyv: CustomerLedger.parse(params[:vevoFokonyv]),
azonosito: params[:azonosito],
alairoNeve: params[:alairoNeve],
telefonszam: params[:telefonszam],
megjegyzes: params[:megjegyzes]
}
__MODULE__
|> struct(Map.drop(params, [:vevoFokonyv]))
|> Map.put(:vevoFokonyv, CustomerLedger.parse(params[:vevoFokonyv]))
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
nev: &"<nev>#{&1}</nev>",
orszag: &"<orszag>#{&1}</orszag>",
irsz: &"<irsz>#{&1}</irsz>",
telepules: &"<telepules>#{&1}</telepules>",
cim: &"<cim>#{&1}</cim>",
email: &"<email>#{&1}</email>",
sendEmail: &"<sendEmail>#{&1}</sendEmail>",
adoalany: &"<adoalany>#{&1}</adoalany>",
adoszam: &"<adoszam>#{&1}</adoszam>",
csoportazonosito: &"<csoportazonosito>#{&1}</csoportazonosito>",
adoszamEU: &"<adoszamEU>#{&1}</adoszamEU>",
postazasiNev: &"<postazasiNev>#{&1}</postazasiNev>",
postazasiOrszag: &"<postazasiOrszag>#{&1}</postazasiOrszag>",
postazasiIrsz: &"<postazasiIrsz>#{&1}</postazasiIrsz>",
postazasiTelepules: &"<postazasiTelepules>#{&1}</postazasiTelepules>",
postazasiCim: &"<postazasiCim>#{&1}</postazasiCim>",
vevoFokonyv: &CustomerLedger.to_xml(&1),
azonosito: &"<azonosito>#{&1}</azonosito>",
alairoNeve: &"<alairoNeve>#{&1}</alairoNeve>",
telefonszam: &"<telefonszam>#{&1}</telefonszam>",
megjegyzes: &"<megjegyzes>#{&1}</megjegyzes>"
]

"""
<vevo>
#{StructToXML.run(module, tags)}
</vevo>
"""
end
end
29 changes: 21 additions & 8 deletions lib/modules/create_invoice/customer_ledger.ex
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.CustomerLedger do
alias ExSzamlazzHu.Utils.StructToXML

@type t :: %__MODULE__{}

defstruct [
Expand All @@ -14,13 +16,24 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.CustomerLedger do
def parse(nil), do: nil

def parse(params) do
%__MODULE__{
konyvelesDatum: params[:konyvelesDatum],
vevoAzonosito: params[:vevoAzonosito],
vevoFokonyviSzam: params[:vevoFokonyviSzam],
folyamatosTelj: params[:folyamatosTelj],
elszDatumTol: params[:elszDatumTol],
elszDatumIg: params[:elszDatumIg]
}
struct(__MODULE__, params)
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
konyvelesDatum: &"<konyvelesDatum>#{&1}</konyvelesDatum>",
vevoAzonosito: &"<vevoAzonosito>#{&1}</vevoAzonosito>",
vevoFokonyviSzam: &"<vevoFokonyviSzam>#{&1}</vevoFokonyviSzam>",
folyamatosTelj: &"<folyamatosTelj>#{&1}</folyamatosTelj>",
elszDatumTol: &"<elszDatumTol>#{&1}</elszDatumTol>",
elszDatumIg: &"<elszDatumIg>#{&1}</elszDatumIg>"
]

"""
<vevoFokonyv>
#{StructToXML.run(module, tags)}
</vevoFokonyv>
"""
end
end
69 changes: 41 additions & 28 deletions lib/modules/create_invoice/header.ex
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.Header do
alias ExSzamlazzHu.Utils.StructToXML

@type t :: %__MODULE__{}

@enforce_keys [
Expand Down Expand Up @@ -41,33 +43,44 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.Header do
def parse(nil), do: nil

def parse(params) do
%__MODULE__{
keltDatum: params[:keltDatum],
teljesitesDatum: params[:teljesitesDatum],
fizetesiHataridoDatum: params[:fizetesiHataridoDatum],
fizmod: params[:fizmod],
penznem: params[:penznem],
szamlaNyelve: params[:szamlaNyelve],
megjegyzes: params[:megjegyzes],
arfolyamBank: params[:arfolyamBank],
arfolyam: params[:arfolyam],
rendelesSzam: params[:rendelesSzam],
dijbekeroSzamlaszam: params[:dijbekeroSzamlaszam],
elolegszamla: params[:elolegszamla],
vegszamla: params[:vegszamla],
elolegSzamlaszam: params[:elolegSzamlaszam],
helyesbitoszamla: params[:helyesbitoszamla],
helyesbitettSzamlaszam: params[:helyesbitettSzamlaszam],
dijbekero: params[:dijbekero],
szallitolevel: params[:szallitolevel],
logoExtra: params[:logoExtra],
szamlaszamElotag: params[:szamlaszamElotag],
fizetendoKorrekcio: params[:fizetendoKorrekcio],
fizetve: params[:fizetve],
arresAfa: params[:arresAfa],
eusAfa: params[:eusAfa],
szamlaSablon: params[:szamlaSablon],
elonezetpdf: params[:elonezetpdf]
}
struct(__MODULE__, params)
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
keltDatum: &"<keltDatum>#{&1}</keltDatum>",
teljesitesDatum: &"<teljesitesDatum>#{&1}</teljesitesDatum>",
fizetesiHataridoDatum: &"<fizetesiHataridoDatum>#{&1}</fizetesiHataridoDatum>",
fizmod: &"<fizmod>#{&1}</fizmod>",
penznem: &"<penznem>#{&1}</penznem>",
szamlaNyelve: &"<szamlaNyelve>#{&1}</szamlaNyelve>",
megjegyzes: &"<megjegyzes>#{&1}</megjegyzes>",
arfolyamBank: &"<arfolyamBank>#{&1}</arfolyamBank>",
arfolyam: &"<arfolyam>#{&1}</arfolyam>",
rendelesSzam: &"<rendelesSzam>#{&1}</rendelesSzam>",
dijbekeroSzamlaszam: &"<dijbekeroSzamlaszam>#{&1}</dijbekeroSzamlaszam>",
elolegszamla: &"<elolegszamla>#{&1}</elolegszamla>",
vegszamla: &"<vegszamla>#{&1}</vegszamla>",
elolegSzamlaszam: &"<elolegSzamlaszam>#{&1}</elolegSzamlaszam>",
helyesbitoszamla: &"<helyesbitoszamla>#{&1}</helyesbitoszamla>",
helyesbitettSzamlaszam: &"<helyesbitettSzamlaszam>#{&1}</helyesbitettSzamlaszam>",
dijbekero: &"<dijbekero>#{&1}</dijbekero>",
szallitolevel: &"<szallitolevel>#{&1}</szallitolevel>",
logoExtra: &"<logoExtra>#{&1}</logoExtra>",
szamlaszamElotag: &"<szamlaszamElotag>#{&1}</szamlaszamElotag>",
fizetendoKorrekcio: &"<fizetendoKorrekcio>#{&1}</fizetendoKorrekcio>",
fizetve: &"<fizetve>#{&1}</fizetve>",
arresAfa: &"<arresAfa>#{&1}</arresAfa>",
eusAfa: &"<eusAfa>#{&1}</eusAfa>",
szamlaSablon: &"<szamlaSablon>#{&1}</szamlaSablon>",
elonezetpdf: &"<elonezetpdf>#{&1}</elonezetpdf>"
]

"""
<fejlec>
#{StructToXML.run(module, tags)}
</fejlec>
"""
end
end
28 changes: 26 additions & 2 deletions lib/modules/create_invoice/invoice_data.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.InvoiceData do
alias ExSzamlazzHu.Modules.CreateInvoice.Seller
alias ExSzamlazzHu.Modules.CreateInvoice.Customer
alias ExSzamlazzHu.Modules.CreateInvoice.Waybill
alias ExSzamlazzHu.Modules.CreateInvoice.Item
alias ExSzamlazzHu.Modules.CreateInvoice.Items
alias ExSzamlazzHu.Utils.StructToXML

@type t :: %__MODULE__{}

Expand All @@ -25,7 +26,30 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.InvoiceData do
elado: Seller.parse(params[:elado]),
vevo: Customer.parse(params[:vevo]),
fuvarlevel: Waybill.parse(params[:fuvarlevel]),
tetelek: Enum.map(params[:tetelek] || [], &Item.parse(&1))
tetelek: Items.parse(params[:tetelek])
}
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
beallitasok: &Settings.to_xml(&1),
fejlec: &Header.to_xml(&1),
elado: &Seller.to_xml(&1),
vevo: &Customer.to_xml(&1),
fuvarlevel: &Waybill.to_xml(&1),
tetelek: &Items.to_xml(&1)
]

"""
<?xml version="1.0" encoding="UTF-8"?>
<xmlszamla
xmlns="http://www.szamlazz.hu/xmlszamla"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.szamlazz.hu/xmlszamla https://www.szamlazz.hu/szamla/docs/xsds/agent/xmlszamla.xsd"
>
#{StructToXML.run(module, tags)}
</xmlszamla>
"""
end
end
46 changes: 30 additions & 16 deletions lib/modules/create_invoice/item.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.Item do
alias ExSzamlazzHu.Modules.CreateInvoice.ItemLedger
defmodule ExSzamlazzHu.Modules.CreateInvoice.Items.Item do
alias ExSzamlazzHu.Modules.CreateInvoice.Items.Item.ItemLedger
alias ExSzamlazzHu.Utils.StructToXML

@type t() :: %__MODULE__{}

Expand Down Expand Up @@ -32,19 +33,32 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.Item do
def parse(nil), do: nil

def parse(params) do
%__MODULE__{
megnevezes: params[:megnevezes],
azonosito: params[:azonosito],
mennyiseg: params[:mennyiseg],
mennyisegiEgyseg: params[:mennyisegiEgyseg],
nettoEgysegar: params[:nettoEgysegar],
afakulcs: params[:afakulcs],
arresAfaAlap: params[:arresAfaAlap],
nettoErtek: params[:nettoErtek],
afaErtek: params[:afaErtek],
bruttoErtek: params[:bruttoErtek],
megjegyzes: params[:megjegyzes],
tetelFokonyv: ItemLedger.parse(params[:tetelFokonyv])
}
__MODULE__
|> struct(Map.drop(params, [:tetelFokonyv]))
|> Map.put(:tetelFokonyv, ItemLedger.parse(params[:tetelFokonyv]))
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
megnevezes: &"<megnevezes>#{&1}</megnevezes>",
azonosito: &"<azonosito>#{&1}</azonosito>",
mennyiseg: &"<mennyiseg>#{&1}</mennyiseg>",
mennyisegiEgyseg: &"<mennyisegiEgyseg>#{&1}</mennyisegiEgyseg>",
nettoEgysegar: &"<nettoEgysegar>#{&1}</nettoEgysegar>",
afakulcs: &"<afakulcs>#{&1}</afakulcs>",
arresAfaAlap: &"<arresAfaAlap>#{&1}</arresAfaAlap>",
nettoErtek: &"<nettoErtek>#{&1}</nettoErtek>",
afaErtek: &"<afaErtek>#{&1}</afaErtek>",
bruttoErtek: &"<bruttoErtek>#{&1}</bruttoErtek>",
megjegyzes: &"<megjegyzes>#{&1}</megjegyzes>",
tetelFokonyv: &ItemLedger.to_xml(&1)
]

"""
<tetel>
#{StructToXML.run(module, tags)}
</tetel>
"""
end
end
31 changes: 22 additions & 9 deletions lib/modules/create_invoice/item_ledger.ex
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.ItemLedger do
defmodule ExSzamlazzHu.Modules.CreateInvoice.Items.Item.ItemLedger do
alias ExSzamlazzHu.Utils.StructToXML

@type t :: %__MODULE__{}

defstruct [
Expand All @@ -14,13 +16,24 @@ defmodule ExSzamlazzHu.Modules.CreateInvoice.ItemLedger do
def parse(nil), do: nil

def parse(params) do
%__MODULE__{
gazdasagiEsem: params[:gazdasagiEsem],
gazdasagiEsemAfa: params[:gazdasagiEsemAfa],
arbevetelFokonyviSzam: params[:arbevetelFokonyviSzam],
afaFokonyviSzam: params[:afaFokonyviSzam],
elszDatumTol: params[:elszDatumTol],
elszDatumIg: params[:elszDatumIg]
}
struct(__MODULE__, params)
end

@spec to_xml(t()) :: String.t()
def to_xml(%__MODULE__{} = module) do
tags = [
gazdasagiEsem: &"<gazdasagiEsem>#{&1}</gazdasagiEsem>",
gazdasagiEsemAfa: &"<gazdasagiEsemAfa>#{&1}</gazdasagiEsemAfa>",
arbevetelFokonyviSzam: &"<arbevetelFokonyviSzam>#{&1}</arbevetelFokonyviSzam>",
afaFokonyviSzam: &"<afaFokonyviSzam>#{&1}</afaFokonyviSzam>",
elszDatumTol: &"<elszDatumTol>#{&1}</elszDatumTol>",
elszDatumIg: &"<elszDatumIg>#{&1}</elszDatumIg>"
]

"""
<tetelFokonyv>
#{StructToXML.run(module, tags)}
</tetelFokonyv>
"""
end
end
24 changes: 24 additions & 0 deletions lib/modules/create_invoice/items.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
defmodule ExSzamlazzHu.Modules.CreateInvoice.Items do
alias ExSzamlazzHu.Modules.CreateInvoice.Items.Item

def parse(nil), do: []

def parse(params) do
Enum.map(params, &Item.parse/1)
end

def to_xml(items) do
rendered_items =
items
|> Enum.map(&Item.to_xml/1)
|> Enum.join("\n")
|> String.replace("\n\n", "\n")
|> String.trim()

"""
<tetelek>
#{rendered_items}
</tetelek>
"""
end
end
Loading

0 comments on commit 3fe6010

Please sign in to comment.