defmodule Ami.PackagePeriod do use Ecto.Schema import Ecto.Query alias Ami.{ Package, CoursePeriod, Repo } schema "package_periods" do field(:starts_on, :date) field(:ends_on, :date) field(:enrollment_end, :date) field(:created_at, :utc_datetime) field(:updated_at, :utc_datetime) belongs_to(:package, Package) has_many(:course_periods, CoursePeriod) has_many(:courses, through: [:course_periods, :course]) end def is_active?(package_period) do Date.compare(package_period.starts_on, Date.utc_today()) in [:lt, :eq] && Date.compare(package_period.ends_on, Date.utc_today()) in [:gt, :eq] end def current_for(package) do Repo.all( from( pp in __MODULE__, where: pp.package_id == ^package.id, where: pp.starts_on <= ^Date.utc_today() and pp.ends_on >= ^Date.utc_today(), order_by: [asc: pp.starts_on] ) ) |> List.first() end end