forked from shibao/cannery
move staging to container
This commit is contained in:
@ -547,7 +547,7 @@ defmodule Cannery.Ammo do
|
||||
|
||||
@spec list_packs_staged(Queryable.t(), staged :: boolean() | nil) :: Queryable.t()
|
||||
defp list_packs_staged(query, staged) when staged |> is_boolean(),
|
||||
do: query |> where([p: p], p.staged == ^staged)
|
||||
do: query |> where([c: c], c.staged == ^staged)
|
||||
|
||||
defp list_packs_staged(query, _nil), do: query
|
||||
|
||||
|
@ -11,21 +11,19 @@ defmodule Cannery.Ammo.Pack do
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:id,
|
||||
:container_id,
|
||||
:count,
|
||||
:id,
|
||||
:lot_number,
|
||||
:notes,
|
||||
:price_paid,
|
||||
:lot_number,
|
||||
:staged,
|
||||
:type_id,
|
||||
:container_id
|
||||
:type_id
|
||||
]}
|
||||
schema "packs" do
|
||||
field :count, :integer
|
||||
field :lot_number, :string
|
||||
field :notes, :string
|
||||
field :price_paid, :float
|
||||
field :staged, :boolean, default: false
|
||||
field :lot_number, :string
|
||||
field :purchased_on, :date
|
||||
|
||||
belongs_to :type, Type
|
||||
@ -36,12 +34,11 @@ defmodule Cannery.Ammo.Pack do
|
||||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
id: id(),
|
||||
count: integer,
|
||||
id: id(),
|
||||
lot_number: String.t() | nil,
|
||||
notes: String.t() | nil,
|
||||
price_paid: float() | nil,
|
||||
staged: boolean(),
|
||||
lot_number: String.t() | nil,
|
||||
purchased_on: Date.t(),
|
||||
type: Type.t() | nil,
|
||||
type_id: Type.id(),
|
||||
@ -92,7 +89,13 @@ defmodule Cannery.Ammo.Pack do
|
||||
|> change(type_id: type_id)
|
||||
|> change(container_id: container_id)
|
||||
|> change(user_id: user_id)
|
||||
|> cast(attrs, [:count, :lot_number, :notes, :price_paid, :purchased_on, :staged])
|
||||
|> cast(attrs, [
|
||||
:count,
|
||||
:lot_number,
|
||||
:notes,
|
||||
:price_paid,
|
||||
:purchased_on
|
||||
])
|
||||
|> validate_required(:type_id, message: dgettext("errors", "Please select a valid type"))
|
||||
|> validate_required(:container_id,
|
||||
message: dgettext("errors", "Please select a valid container")
|
||||
@ -100,7 +103,13 @@ defmodule Cannery.Ammo.Pack do
|
||||
|> validate_number(:count, greater_than: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> validate_required([:count, :staged, :purchased_on, :type_id, :container_id, :user_id])
|
||||
|> validate_required([
|
||||
:container_id,
|
||||
:count,
|
||||
:purchased_on,
|
||||
:type_id,
|
||||
:user_id
|
||||
])
|
||||
end
|
||||
|
||||
@doc false
|
||||
@ -108,19 +117,22 @@ defmodule Cannery.Ammo.Pack do
|
||||
def update_changeset(pack, attrs, user) do
|
||||
pack
|
||||
|> cast(attrs, [
|
||||
:container_id,
|
||||
:count,
|
||||
:price_paid,
|
||||
:notes,
|
||||
:staged,
|
||||
:purchased_on,
|
||||
:lot_number,
|
||||
:container_id
|
||||
:notes,
|
||||
:price_paid,
|
||||
:purchased_on
|
||||
])
|
||||
|> validate_number(:count, greater_than_or_equal_to: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_container_id(user)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> validate_required([:count, :staged, :purchased_on, :container_id])
|
||||
|> validate_required([
|
||||
:container_id,
|
||||
:count,
|
||||
:purchased_on
|
||||
])
|
||||
end
|
||||
|
||||
defp validate_container_id(changeset, user) do
|
||||
@ -140,7 +152,7 @@ defmodule Cannery.Ammo.Pack do
|
||||
@spec range_changeset(t() | new_pack(), attrs :: map()) :: changeset()
|
||||
def range_changeset(pack, attrs) do
|
||||
pack
|
||||
|> cast(attrs, [:count, :staged])
|
||||
|> validate_required([:count, :staged])
|
||||
|> cast(attrs, [:count])
|
||||
|> validate_required([:count])
|
||||
end
|
||||
end
|
||||
|
@ -9,7 +9,9 @@ defmodule Cannery.Containers do
|
||||
|
||||
@container_preloads [:tags]
|
||||
|
||||
@type list_containers_option :: {:search, String.t() | nil}
|
||||
@type list_containers_option ::
|
||||
{:search, String.t() | nil}
|
||||
| {:staged, boolean() | nil}
|
||||
@type list_containers_options :: [list_containers_option()]
|
||||
|
||||
@doc """
|
||||
@ -20,7 +22,10 @@ defmodule Cannery.Containers do
|
||||
iex> list_containers(%User{id: 123})
|
||||
[%Container{}, ...]
|
||||
|
||||
iex> list_containers(%User{id: 123}, search: "cool")
|
||||
iex> list_containers(%User{id: 123},
|
||||
...> search: "cool",
|
||||
...> staged: true
|
||||
...> )
|
||||
[%Container{name: "my cool container"}, ...]
|
||||
|
||||
"""
|
||||
@ -37,9 +42,16 @@ defmodule Cannery.Containers do
|
||||
preload: ^@container_preloads
|
||||
)
|
||||
|> list_containers_search(Keyword.get(opts, :search))
|
||||
|> list_containers_staged(Keyword.get(opts, :staged))
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@spec list_containers_staged(Queryable.t(), staged :: boolean() | nil) :: Queryable.t()
|
||||
defp list_containers_staged(query, staged) when staged |> is_boolean(),
|
||||
do: query |> where([c: c], c.staged == ^staged)
|
||||
|
||||
defp list_containers_staged(query, _nil), do: query
|
||||
|
||||
@spec list_containers_search(Queryable.t(), search :: String.t() | nil) :: Queryable.t()
|
||||
defp list_containers_search(query, search) when search in ["", nil],
|
||||
do: query |> order_by([c: c], c.name)
|
||||
|
@ -8,17 +8,19 @@ defmodule Cannery.Containers.Container do
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:id,
|
||||
:name,
|
||||
:desc,
|
||||
:id,
|
||||
:location,
|
||||
:type,
|
||||
:tags
|
||||
:name,
|
||||
:staged,
|
||||
:tags,
|
||||
:type
|
||||
]}
|
||||
schema "containers" do
|
||||
field :name, :string
|
||||
field :desc, :string
|
||||
field :location, :string
|
||||
field :name, :string
|
||||
field :staged, :boolean, default: false
|
||||
field :type, :string
|
||||
|
||||
field :user_id, :binary_id
|
||||
@ -29,10 +31,11 @@ defmodule Cannery.Containers.Container do
|
||||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
id: id(),
|
||||
name: String.t(),
|
||||
desc: String.t(),
|
||||
id: id(),
|
||||
location: String.t(),
|
||||
name: String.t(),
|
||||
staged: boolean(),
|
||||
type: String.t(),
|
||||
user_id: User.id(),
|
||||
tags: [Tag.t()] | nil,
|
||||
@ -48,19 +51,40 @@ defmodule Cannery.Containers.Container do
|
||||
def create_changeset(container, %User{id: user_id}, attrs) do
|
||||
container
|
||||
|> change(user_id: user_id)
|
||||
|> cast(attrs, [:name, :desc, :type, :location])
|
||||
|> cast(attrs, [
|
||||
:desc,
|
||||
:location,
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
|> validate_length(:name, max: 255)
|
||||
|> validate_length(:type, max: 255)
|
||||
|> validate_required([:name, :type, :user_id])
|
||||
|> validate_required([
|
||||
:name,
|
||||
:staged,
|
||||
:type,
|
||||
:user_id
|
||||
])
|
||||
end
|
||||
|
||||
@doc false
|
||||
@spec update_changeset(t() | new_container(), attrs :: map()) :: changeset()
|
||||
def update_changeset(container, attrs) do
|
||||
container
|
||||
|> cast(attrs, [:name, :desc, :type, :location])
|
||||
|> cast(attrs, [
|
||||
:desc,
|
||||
:location,
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
|> validate_length(:name, max: 255)
|
||||
|> validate_length(:type, max: 255)
|
||||
|> validate_required([:name, :type])
|
||||
|> validate_required([
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user