defmodule SEVOVV do use Application require KVS require ERP require FORM def id(ERP."Employee"(person: ERP."Person"(id: id))), do: id def id(el) when is_tuple(el), do: :erlang.element(2, el) def id(el) when is_list(el), do: :lists.map(fn x when is_tuple(x) -> :erlang.element(2, x); x1 -> x1 end, el) def id(el) when is_binary(el) or is_atom(el), do: el def id(_), do: "" def v4() do v4(:rand.uniform(:erlang.round(:math.pow(2, 48))) - 1, :rand.uniform(:erlang.round(:math.pow(2, 12))) - 1, :rand.uniform(:erlang.round(:math.pow(2, 32))) - 1, :rand.uniform(:erlang.round(:math.pow(2, 30))) - 1) end def v4(r1, r2, r3, r4), do: <> def guid(), do: :nitro.to_binary(:string.uppercase(to_str(v4()))) def to_str(u), do: :lists.flatten(:io_lib.format('~8.16.0b-~4.16.0b-~4.16.0b-~2.16.0b~2.16.0b-~12.16.0b', get_parts(u))) def get_parts(<>), do: [tL, tM, tHV, cSR, cSL, n] def get_doc_id(doc), do: apply(rules(), :get_doc_id, [id_rules(:erlang.element(1, doc)), :erlang.element(1, doc), doc]) def get_doc_id(doc, input_id), do: apply(rules(), :get_doc_id, [id_rules(:erlang.element(1, doc)), :erlang.element(1, doc), doc, input_id]) def get_proc_id(doc_type, doc_id), do: apply(rules(), :get_proc_id, [id_rules(doc_type), doc_id]) def rules(), do: :application.get_env(:crm, :rules_module, SEVOVV) def id_rules(doc_type), do: (case :kvs.get("/crm/docs", doc_type) do {:ok, FORM.formReg(id_rules: x)} -> x; _ -> [] end) def start(_, _) do :logger.add_handlers(:sevovv) :kvs.join([], KVS.kvs(mod: :kvs_rocks, db: 'rocksdb')) :kvs.join([], KVS.kvs(mod: :kvs_mnesia)) :erp.boot() sev_ovv = Supervisor.start_link([], strategy: :one_for_one, name: SEVOVV) SEV.Listener.start() sev_ovv end end