zf

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

commit 4ec7ad27f3d9fe7a6ce93c3cd9b64e8cd57645de
parent 593d7300f1efc8aaced80dea9ccdb8133031e6d8
Author: srfsh <dev@srf.sh>
Date:   Tue, 15 Nov 2022 00:58:37 +0300

Zenflows.VF.EconomicResource.{Domain,Type,Resolv}: introducte previous call

This is one step forward the implementation of trace.

Diffstat:
Msrc/zenflows/vf/economic_resource/domain.ex | 13+++++++++++++
Msrc/zenflows/vf/economic_resource/query.ex | 10+++++++++-
Msrc/zenflows/vf/economic_resource/resolv.ex | 4++++
Msrc/zenflows/vf/economic_resource/type.ex | 3+++
4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex @@ -22,6 +22,7 @@ alias Ecto.{Changeset, Multi} alias Zenflows.DB.{Page, Repo, Schema} alias Zenflows.VF.{ Action, + EconomicEvent, EconomicResource, EconomicResource.Query, Measure, @@ -58,6 +59,18 @@ def all!(page \\ Page.new()) do value end +@spec previous(EconomicResource.t() | Schema.id()) :: [EconomicEvent.t()] +def previous(_, _ \\ Page.new()) +def previous(%EconomicResource{id: id}, page), do: previous(id, page) +def previous(id, page) do + Query.previous(id) + |> Page.all(page) + |> Enum.sort(&( + &1.previous_event_id == nil + or &1.id == &2.previous_event_id + or &1.id <= &2.id)) +end + @spec classifications() :: [String.t()] def classifications() do import Ecto.Query diff --git a/src/zenflows/vf/economic_resource/query.ex b/src/zenflows/vf/economic_resource/query.ex @@ -22,7 +22,7 @@ import Ecto.Query alias Ecto.{Changeset, Queryable} alias Zenflows.DB.{ID, Page, Schema, Validate} -alias Zenflows.VF.EconomicResource +alias Zenflows.VF.{EconomicEvent, EconomicResource} @spec all(Page.t()) :: {:ok, Queryable.t()} | {:error, Changeset.t()} def all(%{filter: nil}), do: {:ok, EconomicResource} @@ -66,4 +66,12 @@ defp all_validate(params) do greater_than_or_equal_to: 0) |> Changeset.apply_action(nil) end + +@spec previous(Schema.id()) :: Queryable.t() +def previous(id) do + from e in EconomicEvent, + or_where: not is_nil(e.output_of_id) and e.resource_inventoried_as_id == ^id, + or_where: e.to_resource_inventoried_as_id == ^id, + or_where: e.action_id in ["raise", "lower"] and e.resource_inventoried_as_id == ^id +end end diff --git a/src/zenflows/vf/economic_resource/resolv.ex b/src/zenflows/vf/economic_resource/resolv.ex @@ -109,4 +109,8 @@ def unit_of_effort(eco_res, _, _) do eco_res = Domain.preload(eco_res, :unit_of_effort) {:ok, eco_res.unit_of_effort} end + +def previous(eco_res, _, _) do + {:ok, Domain.previous(eco_res)} +end end diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex @@ -177,6 +177,9 @@ object :economic_resource do @desc @metadata field :metadata, :json + + field :previous, list_of(non_null(:economic_event)), + resolve: &Resolv.previous/3 end input_object :economic_resource_create_params do