Current section

Files

Jump to
plm lib events plm.ex
Raw

lib/events/plm.ex

defmodule PLM.Index do
require Logger
use N2O, with: [:n2o, :kvs, :nitro]
use FORM
use BPE
require ERP
def header() do
panel(
id: :header,
class: :th,
body: [
panel(class: :column6, body: "Code"),
panel(class: :column10, body: "Structure"),
panel(class: :column6, body: "People"),
panel(class: :column20, body: "Income/Outcome"),
panel(class: :column20, body: "Control")
]
)
end
def series(income),
do: '[' ++ :string.join(income ++ :lists.duplicate(6 - length(income), '0'), ',') ++ ']'
def payments(feed) do
:lists.map(
fn ERP."Payment"(price: {_, a2}, volume: {_, b2}) ->
:erlang.integer_to_list(a2 * b2)
end,
KVS.head(feed, 6)
)
end
def months() do
{{_, x, _}, _} = :calendar.local_time()
h1 = [:Jan, :Feb, :Mar, :Apr, :May, :Jun]
h2 = [:Jul, :Aug, :Sep, :Oct, :Nov, :Dec]
zip = :lists.zip(:lists.seq(1, 12), h1 ++ h2)
{a, b} = :lists.split(x, zip)
piz = b ++ a
half = :lists.reverse(:lists.sublist(:lists.reverse(piz, 1), 6))
{x, :lists.flatten(:io_lib.format("~p", [:erlang.element(2, :lists.unzip(half))]))}
end
def event(:init) do
NITRO.clear(:tableRow)
NITRO.clear(:tableHead)
NITRO.insert_top(:tableHead, PLM.Index.header())
for i <- KVS.feed('/plm/products') do
code = ERP."Product"(i, :code)
{_, scale} = months()
income = payments('/plm/' ++ code ++ '/income')
outcome = payments('/plm/' ++ code ++ '/outcome')
send(self(), {:direct, {:chart, code, scale, series(income), series(outcome), i}})
end
end
def event({:chart, code, x, y, z, i}) do
NITRO.insert_bottom(:tableRow, PLM.Rows.Product.new(code, i))
NITRO.wire(['draw_chart(\'', code, '\',', x, ',', y, ',', z, ');'])
end
def event({:invest, code}), do: NITRO.redirect('cashflow.htm?p=' ++ code)
def event(_), do: []
end