Current section

Files

Jump to
erp src boot fin_boot.erl
Raw

src/boot/fin_boot.erl

-module(fin_boot).
-compile(export_all).
-include("person.hrl").
-include("acc.hrl").
-include("product.hrl").
-include("payment.hrl").
-include("investment.hrl").
-include_lib("kvs/include/kvs.hrl").
-include_lib("kvs/include/cursors.hrl").
boot() ->
accounts(),
inv_boot().
acc("NYNJA" = X) ->
[ #'Acc'{id = X ++ "/insurance", rate = {2,70}},
#'Acc'{id = X ++ "/options", rate = {2,10}},
#'Acc'{id = X ++ "/reserved", rate = {2,10}},
#'Acc'{id = X ++ "/R&D", rate = {2,10}}
];
acc("CATALX" = X ) ->
[ #'Acc'{id = X ++ "/insurance", rate = {2,50}},
#'Acc'{id = X ++ "/options", rate = {2,10}},
#'Acc'{id = X ++ "/reserved", rate = {2,15}},
#'Acc'{id = X ++ "/R&D", rate = {2,15}}
].
payments(C) -> kvs:all("/plm/"++C++"/income").
rate(#'Payment'{price=P, volume=V}=Pay,#'Acc'{id=Id, rate=R}=Acc,C) ->
Pay#'Payment'{invoice= kvs:seq([],[]), volume={0,1}, price=dec:mul(R,dec:mul(P,V))}.
accounts() ->
lists:map(fun(#'Product'{code=C}) ->
lists:map(fun(#'Acc'{id=Id, rate=R}=SubAcc) ->
Address = lists:concat(["/fin/acc/",C]),
kvs:append(SubAcc,Address),
Feed = lists:concat(["/fin/tx/",Id]),
case kvs:get(writer, Feed) of
{error,_} -> lists:map(fun(#'Payment'{invoice=I,price=P, volume=V}=Pay) ->
kvs:append(rate(Pay,SubAcc,C), Feed) end, payments(C));
{ok,_} -> skip
end
end, acc(C))
end, plm_boot:products()).
inv_boot() ->
lists:map(fun(#'Product'{code=C}) ->
{ok, #'Acc'{rate= Rate}=Acc} = kvs:get("/fin/acc/" ++ C, C ++ "/options"),
Hours = lists:foldl(fun (#'Person'{hours=A},Acc) -> Acc + A end,0,kvs:all("/plm/"++C++"/staff")),
Feed = "/plm/"++C++"/investments",
case kvs:get(writer,Feed) of
{error,_} -> lists:map(fun(#'Person'{cn=Person,hours=X}) ->
lists:map(fun(#'Payment'{invoice=I,price=P,volume=V}=Pay) ->
kvs:append(rate(Pay,Acc#'Acc'{rate = dec:mul(Rate,dec:'div'({0,Hours},{0,X}))},C),
"/fin/iban/" ++ Person) end,
kvs:all("/fin/tx/"++C++"/options")) end,
kvs:all("/plm/"++C++"/staff"));
{ok,_} -> skip end end, plm_boot:products()).