defmodule FinTex.Command.AbstractCommand do @moduledoc false alias FinTex.Model.Dialog import Logger defmacro __using__(_) do quote do alias FinTex.Model.Dialog alias FinTex.Command.AbstractCommand import AbstractCommand import Logger end end def create(struct, d = %Dialog{}) do struct.__struct__.new(struct, d) end # Replace DKKAU by DIKAUS # Replace HKKAZ by KIKAZS # Replace HKPIN by HIPINS # Replace HKSPA by HISPAS def control_structure_to_bpd(name) when is_binary(name) do name |> String.upcase |> String.replace(~r/^(\w)\w(\w{3})$/, "\\1I\\2S") end # Replace DIKAUS by DKKAU # Replace KIKAZS by HKKAZ # Replace HIPINS by HKPIN # Replace HISPAS by HKSPA def bpd_to_control_structure(name) when is_binary(name) do name |> String.upcase |> String.replace(~r/^(\w)\w(\w{3}).+$/, "\\1K\\2") end def to_messages(feedback_segments) do feedback_segments |> Stream.flat_map(&Enum.at(&1, -1)) |> Enum.sort(fn [code1 | _], [code2 | _] -> code1 >= code2 end) end def format_messages(feedback_segments) do feedback_segments |> to_messages |> Enum.map(fn [code, _ref, text] -> "#{code} #{text}" [code, _ref, text | params] -> "#{code} #{text} #{Enum.join(params, ", ")}" end) end def check_messages_for_errors(feedback_segments) do strings = feedback_segments |> format_messages strings |> Enum.each(&warn/1) case feedback_segments |> to_messages |> Enum.at(0) do [code | _] when code >= 9000 -> raise FinTex.Error, reason: strings |> Enum.join(" ") _ -> feedback_segments end end def dialog_id(response) do response[:HNHBK] |> Enum.at(0) |> Enum.at(3) end end