Current section

Files

Jump to
ami lib ami package.ex
Raw

lib/ami/package.ex

defmodule Ami.Package do
use Ecto.Schema
import Ecto.{Query}
# alias Users.User
alias Ami.{
PackagePeriod,
TeaserImage,
EnrollmentInterest,
PackageToolKit,
PromoCode,
Repo,
Video
}
schema "packages" do
@timestamps_opts [type: :naive_datetime_usec]
field(:title, :string)
field(:description, :string)
field(:marketing_url, :string)
field(:is_featured, :boolean)
field(:on_air, :boolean)
field(:price, :integer)
field(:price_currency, :string)
field(:search_box_text, :string)
field(:slug, :string)
field(:teaser_banner_text, :string)
field(:teaser_description, :string)
field(:total_hours, :integer)
field(:why_take_package, :string)
field(:created_at, :utc_datetime_usec)
field(:updated_at, :utc_datetime_usec)
has_many(:package_periods, PackagePeriod)
has_many(:enrollments, through: [:package_periods, :enrollment])
has_many(:users, through: [:enrollments, :user])
has_many(:teaser_images, TeaserImage, on_delete: :delete_all, foreign_key: :teaseable_id)
has_one(:video, Video, foreign_key: :videoable_id, on_delete: :delete_all)
has_many(:enrollment_interests, EnrollmentInterest, foreign_key: :package_id)
has_many(:interested_users, through: [:enrollment_interests, :user])
has_many(:package_tool_kits, PackageToolKit)
has_many(:tool_kits, through: [:package_tool_kits, :tool_kit])
has_many(:promo_codes, PromoCode)
end
def on_air do
package_periods_query =
from(
pp in PackagePeriod,
where: pp.starts_on <= ^Date.utc_today() and pp.enrollment_end >= ^Date.utc_today(),
order_by: [asc: pp.starts_on]
)
Repo.all(
from(
p in __MODULE__,
where: p.on_air == true,
preload: [package_periods: ^package_periods_query]
)
)
end
def preload_preview_images(struct) do
TeaserImage.preload_preview_images(struct, "Package")
end
def courses_for(package_struct) do
current_package_period = PackagePeriod.current_for(package_struct)
if current_package_period do
Repo.preload(current_package_period, courses: :thumb_images).courses
else
pp =
List.first(
Repo.preload(package_struct, package_periods: [courses: :thumb_images]).package_periods
)
pp.courses
end
end
end