defmodule Accounting.XeroView do
@moduledoc false
def render("start_link.xml") do
"""
Category
"""
end
def render("register_categories.xml", assigns) do
"""
#{for category <- assigns[:categories] do
render("category.xml", category: category)
end}
"""
end
def render("category.xml", assigns) do
"""
"""
end
def render("receive_money.xml", assigns) do
"""
RECEIVE
#{xml_escape assigns[:from]}
#{assigns[:date]}
#{for line_item <- assigns[:line_items] do
render("line_item.xml", line_item: line_item)
end}
#{Application.get_env(:accounting, :bank_account_id)}
"""
end
def render("spend_money.xml", assigns) do
"""
SPEND
#{xml_escape assigns[:to]}
#{assigns[:date]}
#{for line_item <- assigns[:line_items] do
render("line_item.xml", line_item: line_item)
end}
#{Application.get_env(:accounting, :bank_account_id)}
"""
end
def render("transfer.xml", assigns) do
"""
ACCREC
AUTHORISED
#{xml_escape assigns[:from]}
#{assigns[:date]}
#{assigns[:date]}
NoTax
#{for line_item <- assigns[:line_items] do
render("line_item.xml", line_item: line_item)
end}
"""
end
def render("line_item.xml", assigns) do
"""
#{xml_escape assigns[:line_item].description}
1
#{dollar_string_from_pennies assigns[:line_item].amount}
#{xml_escape assigns[:line_item].account_number}
Category
"""
end
def render("create_account.xml", assigns) do
"""
#{xml_escape assigns[:number]}
#{xml_escape assigns[:name]}
CURRLIAB
"""
end
defp dollar_string_from_pennies(pennies) when is_integer(pennies) do
pennies
|> Kernel./(100.0)
|> :erlang.float_to_binary([{:decimals, 2}, :compact])
end
defp xml_escape(string) when is_binary(string) do
IO.iodata_to_binary(for <>, do: escape_char(char))
end
defp escape_char(?"), do: """
defp escape_char(?'), do: "'"
defp escape_char(?<), do: "<"
defp escape_char(?>), do: ">"
defp escape_char(?&), do: "&"
defp escape_char(char), do: char
end