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.{Discount, Money, Tax}
@required_fields [:name, :quantity]
@fields [:description, :order] ++ @required_fields
embedded_schema do
embeds_one(:discount, Discount)
embeds_one(:price, Money)
embeds_one(:tax, Tax)
field(:description, :string)
field(:name, :string)
field(:order, :integer)
field(:quantity, :integer)
end
@doc false
def changeset(item \\ %__MODULE__{}, attrs \\ %{}, in_group \\ false) do
item
|> Changeset.cast(attrs, @fields)
|> Changeset.cast_embed(:discount)
|> Changeset.cast_embed(:price, required: true)
|> Changeset.cast_embed(:tax)
|> Changeset.validate_number(:quantity, greater_than: 0)
|> Changeset.validate_required(@required_fields)
|> Invoicex.validate_order(in_group)
end
end