Current section

Files

Jump to
invoicex lib invoicex document item.ex
Raw

lib/invoicex/document/item.ex

defmodule Invoicex.Document.Item do
@moduledoc """
Stores invoice item data.
"""
use Ecto.Schema
alias Ecto.Changeset
alias Invoicex.Extra.{Money, Tax}
@required_fields [:name, :order, :quantity]
@fields [:description | @required_fields]
embedded_schema do
embeds_many(:taxes, Tax)
embeds_one(:price, Money)
field(:description, :string)
field(:name, :string)
field(:order, :integer)
field(:quantity, :integer)
timestamps()
end
@doc false
def changeset(item \\ %__MODULE__{}, attrs \\ %{}) do
item
|> Changeset.cast(attrs, @fields)
|> Changeset.cast_embed(:price, required: true)
|> Changeset.cast_embed(:taxes)
|> Changeset.validate_number(:order, greater_than: 0)
|> Changeset.validate_number(:quantity, greater_than: 0)
|> Changeset.validate_required(@required_fields)
end
end