zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

commit 700919107d38375c31dc2ffc19ccd3c6e278fde5
parent 9067505ee3dd44de76a292d4c3ab77221a689be2
Author: Alberto Lerda <albertolerda97@gmail.com>
Date:   Tue,  6 Dec 2022 11:22:49 +0100

Zenflows.VF.EcomicResource: first version DPP of stefano

Diffstat:
Msrc/zenflows/vf/economic_resource/domain.ex | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/zenflows/vf/economic_resource/resolv.ex | 4++++
Msrc/zenflows/vf/economic_resource/type.ex | 3+++
3 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex @@ -272,4 +272,88 @@ def multi_delete(m, key \\ multi_key(), id) do |> multi_one("#{key}.one", id) |> Multi.delete(key, &Map.fetch!(&1, "#{key}.one")) end + +@max_depth 100000000 + +@spec trace_dpp_tree_er_before(EconomicResource.t(), MapSet.t(), integer()) :: {MapSet.t(), map()} +def trace_dpp_tree_er_before(_item, visited, depth) when depth >= @max_depth do + {visited, %{}} +end +def trace_dpp_tree_er_before(item = %EconomicResource{}, visited, depth) do + a_dpp_item = %{node: item} + {visited2, children} = EconomicResource.Domain.previous(item) |> Enum.reduce({visited, []}, + fn ee, {visited, children} -> + if MapSet.member?(visited, {ee.__struct__, ee.id}) do + {visited, children} + else + {visited2, child} = trace_dpp_tree_ee_before(ee, visited, depth+1) + {MapSet.put(visited2, {ee.__struct__, ee.id}), [ child | children ]} + end + end + ) + {visited2, Map.put(a_dpp_item, :children, children)} +end + +@spec trace_dpp_tree_ee_before_recurse( + EconomicEvent.t() | EconomicResource.t() | Process.t(), + MapSet.t(), pos_integer() ) :: {MapSet.t(), map()} +def trace_dpp_tree_ee_before_recurse(item = %EconomicResource{}, visited, depth) do + trace_dpp_tree_er_before(item, visited, depth) +end +def trace_dpp_tree_ee_before_recurse(item = %EconomicEvent{}, visited, depth) do + trace_dpp_tree_ee_before(item, visited, depth) +end +def trace_dpp_tree_ee_before_recurse(item = %Process{}, visited, depth) do + trace_dpp_tree_pr_before(item, MapSet.put(visited, {item.__struct__, item.id}), depth) +end + +@spec trace_dpp_tree_ee_before(EconomicEvent.t(), MapSet.t(), pos_integer()) :: {MapSet.t(), map()} +def trace_dpp_tree_ee_before(_item, visited, depth) when depth >= @max_depth do + {visited, %{}} +end +def trace_dpp_tree_ee_before(item = %EconomicEvent{}, visited, depth) do + a_dpp_item = %{node: item} + pr_item = EconomicEvent.Domain.previous(item) + if pr_item == nil do + {visited, Map.put(a_dpp_item, :children, [])} + else + {visited2, children} = [pr_item] |> Enum.reduce({visited, []}, + fn pf, {visited, children} -> + if MapSet.member?(visited, {pf.__struct__, pf.id}) do + {visited, children} + else + {visited2, child} = trace_dpp_tree_ee_before_recurse(pf, visited, depth+1) + { MapSet.put(visited2, {pf.__struct__, pf.id}), [ child | children ]} + end + end + ) + {visited2, Map.put(a_dpp_item, :children, children)} + end +end + +@spec trace_dpp_tree_pr_before(Process.t(), MapSet.t(), integer()) :: {MapSet.t(), map()} +def trace_dpp_tree_pr_before(_item, visited, depth) when depth >= @max_depth do + {visited, %{}} +end +def trace_dpp_tree_pr_before(item, visited, depth) do + a_dpp_item = %{node: item} + {visited2, children} = Process.Domain.previous(item) |> Enum.reduce({visited, []}, + fn ee, {visited, children} -> + if MapSet.member?(visited, ee.id) do + {visited, children} + else + {visited2, child} = trace_dpp_tree_ee_before(ee, visited, depth+1) + {MapSet.put(visited2, ee.id), [ child | children ]} + end + end + ) + {visited2, Map.put(a_dpp_item, :children, children)} +end + +@spec trace_dpp_tree(EconomicResource.t(), Page.t()) :: map() +def trace_dpp_tree(item, _page \\ Page.new()) do + {visited, dpp} = trace_dpp_tree_er_before(item, MapSet.new(), 0) + dpp.children |> IO.inspect + dpp +end end diff --git a/src/zenflows/vf/economic_resource/resolv.ex b/src/zenflows/vf/economic_resource/resolv.ex @@ -117,4 +117,8 @@ end def trace(eco_res, _, _) do {:ok, Domain.trace(eco_res)} end + +def trace_dpp_tree(eco_res, _, _) do + {:ok, Domain.trace_dpp_tree(eco_res)} +end end diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex @@ -183,6 +183,9 @@ object :economic_resource do field :trace, list_of(non_null(:track_trace_item)), resolve: &Resolv.trace/3 + + field :trace_dpp_tree, non_null(:json), + resolve: &Resolv.trace_dpp_tree/3 end input_object :economic_resource_create_params do