-module(testcities2).
-include_lib("nitro/include/nitro.hrl").
-include_lib("n4u/include/wf.hrl").
%% example work with postgresql (with pool)
-export([
main/0,
event/1
]).
main() ->
Tr = hm:get_tr_mod(), % get i18n module by lang
Body = #dtl{file = "testcities", app = n2o_sample, bindings=[
{cities, Tr:tr(testcities, cities) },
{cities_show, Tr:tr(testcities, cities_show) },
{cities_add, Tr:tr(testcities, cities_add) },
{city_name, Tr:tr(testcities, city_name) },
{city_pop, Tr:tr(testcities, city_pop) },
{city_add, Tr:tr(testcities, city_add) }
]},
#dtl{file = "layout", app = n2o_sample, bindings=[
{page_title, Tr:tr(testcities, page_title) },
{page_css, <<"">>},
{page_body, wf:render(Body)},
{page_js, <<"">>}
]}.
event(init) ->
?MODULE:event({client, {sitiesshow}});
%[];
event({client, {sitiesshow}}) ->
Data = pq:get_all_cities(),
InnerHtml = hg:generate_cities_list(Data),
wf:wire(wf:f("var parent = qi('cities');"
"parent.innerHTML='~s';"
"window.getting_data=false;"
"qi('citiesshow').disabled=false;", [unicode:characters_to_binary(InnerHtml, utf8)]));
%% add one city and show all -- example with transaction
event({client, {cityadd, Name, Pop}}) ->
pgm:transaction(fun(Worker) ->
%%epgsql:squery(Mpid, "BEGIN"), %% when transaction without pool
{ok, R1} = pq:add_city_t(Worker, Name, Pop),
hm:assert_int(R1),
{ok, _Columns, Data} = pq:get_all_cities_t(Worker),
%%hm:assert_int(R2)
InnerHtml = hg:generate_cities_list(Data),
wf:wire(wf:f("var parent = qi('cities');"
"parent.innerHTML='~s';"
"window.getting_data=false;"
"qi('citiesshow').disabled=false;", [unicode:characters_to_binary(InnerHtml, utf8)])),
ok
%% commit pg-transaction - when transaction without pool
%%epgsql:squery(Mpid, "COMMIT"),
%% rollback pg-transaction - when transaction without pool
%%epgsql:squery(Mpid, "ROLLBACK"),
%%io:format("~p~n",[epgsql:get_cmd_status(Mpid)]),
%%{ok,commit} or {ok, rollback}
end);
event(Event) ->
wf:info(?MODULE, "Event: ~p", [Event]),
ok.