zf

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

scenario.ex (2094B)


      1 # Zenflows is designed to implement the Valueflows vocabulary,
      2 # written and maintained by srfsh <info@dyne.org>.
      3 # Copyright (C) 2021-2023 Dyne.org foundation <foundation@dyne.org>.
      4 #
      5 # This program is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU Affero General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 #
     10 # This program is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU Affero General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU Affero General Public License
     16 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
     17 
     18 defmodule Zenflows.VF.Scenario do
     19 @moduledoc """
     20 An estimated or analytical logical collection of higher level processes
     21 used for budgeting, analysis, plan refinement, etc.
     22 """
     23 
     24 use Zenflows.DB.Schema
     25 
     26 alias Ecto.Changeset
     27 alias Zenflows.DB.{Schema, Validate}
     28 alias Zenflows.VF.{
     29 	Scenario,
     30 	ScenarioDefinition,
     31 }
     32 
     33 @type t() :: %__MODULE__{
     34 	name: String.t(),
     35 	note: String.t() | nil,
     36 	has_beginning: DateTime.t() | nil,
     37 	has_end: DateTime.t() | nil,
     38 	defined_as: ScenarioDefinition.t() | nil,
     39 	refinement_of: Scenario.t() | nil,
     40 }
     41 
     42 schema "vf_scenario" do
     43 	field :name, :string
     44 	field :note, :string
     45 	field :has_beginning, :utc_datetime_usec
     46 	field :has_end, :utc_datetime_usec
     47 	# field :in_scope_of
     48 	belongs_to :defined_as, ScenarioDefinition
     49 	belongs_to :refinement_of, Scenario
     50 	timestamps()
     51 end
     52 
     53 @reqr [:name]
     54 @cast @reqr ++ ~w[
     55 	note
     56 	has_beginning has_end
     57 	defined_as_id refinement_of_id
     58 ]a
     59 
     60 @doc false
     61 @spec changeset(Schema.t(), Schema.params()) :: Changeset.t()
     62 def changeset(schema \\ %__MODULE__{}, params) do
     63 	schema
     64 	|> Changeset.cast(params, @cast)
     65 	|> Changeset.validate_required(@reqr)
     66 	|> Validate.name(:name)
     67 	|> Validate.note(:note)
     68 	|> Changeset.assoc_constraint(:defined_as)
     69 	|> Changeset.assoc_constraint(:refinement_of)
     70 end
     71 end