defmodule ERP do
require KVS
require Record
@schema [ :branch, :buyer, :contract, :crmRole,
:access, :orgEmail, :fileDesc, :acc,
:dict, :notification, :delivery, :employee,
:inventory, :material, :location, :investment,
:organization, :person, :payment, :seller,
:buyer, :transport, :warehouse, :product, :tic ]
Enum.each(
@schema,
fn t ->
Enum.each(
Record.extract_all(
from_lib: "schema/include/dict/" <> :erlang.list_to_binary(:erlang.atom_to_list(t)) <> ".hrl"
),
fn {name, definition} ->
prev = :application.get_env(:schema, :erp_tables, [])
prev2 = :application.get_env(:schema, :erp_fields, [])
case :lists.member(name, prev) do
true ->
:skip
false ->
Record.defrecord(name, definition)
:application.set_env(:schema, :erp_tables, [name | prev])
:application.set_env(:schema, :erp_fields, [{name,definition} | prev2])
end
end
)
end
)
def metainfo(), do: KVS.schema( name: :erp, tables: erp())
def table(name) do
erp_fields = :application.get_env(:schema, :erp_fields, [])
{a,b} = :lists.unzip(:proplists.get_value(name, erp_fields, []))
KVS.table(name: name, fields: a, instance: b)
end
def erp(), do: :lists.map(fn x -> table(x) end, @schema)
end