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