forked from shibao/cannery
add lot number to packs
This commit is contained in:
@ -19,6 +19,7 @@ defmodule Cannery.Ammo.Pack do
|
||||
:count,
|
||||
:notes,
|
||||
:price_paid,
|
||||
:lot_number,
|
||||
:staged,
|
||||
:type_id,
|
||||
:container_id
|
||||
@ -30,6 +31,7 @@ defmodule Cannery.Ammo.Pack do
|
||||
field :notes, :string
|
||||
field :price_paid, :float
|
||||
field :staged, :boolean, default: false
|
||||
field :lot_number, :string
|
||||
field :purchased_on, :date
|
||||
|
||||
belongs_to :type, Type
|
||||
@ -45,6 +47,7 @@ defmodule Cannery.Ammo.Pack do
|
||||
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(),
|
||||
@ -77,8 +80,10 @@ defmodule Cannery.Ammo.Pack do
|
||||
|> change(type_id: type_id)
|
||||
|> change(user_id: user_id)
|
||||
|> change(container_id: container_id)
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on])
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on, :lot_number])
|
||||
|> 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])
|
||||
end
|
||||
|
||||
@ -89,6 +94,9 @@ defmodule Cannery.Ammo.Pack do
|
||||
pack
|
||||
|> cast(attrs, [:type_id, :container_id])
|
||||
|> validate_required([:type_id, :container_id])
|
||||
|> validate_number(:count, greater_than: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> add_error(:invalid, dgettext("errors", "Please select a type and container"))
|
||||
end
|
||||
|
||||
@ -96,9 +104,19 @@ defmodule Cannery.Ammo.Pack do
|
||||
@spec update_changeset(t() | new_pack(), attrs :: map(), User.t()) :: changeset()
|
||||
def update_changeset(pack, attrs, user) do
|
||||
pack
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on, :container_id])
|
||||
|> cast(attrs, [
|
||||
:count,
|
||||
:price_paid,
|
||||
:notes,
|
||||
:staged,
|
||||
:purchased_on,
|
||||
:lot_number,
|
||||
:container_id
|
||||
])
|
||||
|> 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])
|
||||
end
|
||||
|
||||
|
@ -47,6 +47,11 @@
|
||||
<%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
|
||||
</span>
|
||||
|
||||
<span :if={@pack.lot_number} class="rounded-lg title text-lg">
|
||||
<%= gettext("Lot number:") %>
|
||||
<%= @pack.lot_number %>
|
||||
</span>
|
||||
|
||||
<span :if={@container} class="rounded-lg title text-lg">
|
||||
<%= gettext("Container:") %>
|
||||
|
||||
|
@ -53,6 +53,9 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
}
|
||||
} = socket
|
||||
) do
|
||||
lot_number_used = packs |> Enum.any?(fn %{lot_number: lot_number} -> !!lot_number end)
|
||||
price_paid_used = packs |> Enum.any?(fn %{price_paid: price_paid} -> !!price_paid end)
|
||||
|
||||
columns =
|
||||
[]
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
@ -77,8 +80,18 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
%{label: gettext("Range"), key: :range},
|
||||
range != []
|
||||
)
|
||||
|> TableComponent.maybe_compose_columns(%{label: gettext("CPR"), key: :cpr})
|
||||
|> TableComponent.maybe_compose_columns(%{label: gettext("Price paid"), key: :price_paid})
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
%{label: gettext("Lot number"), key: :lot_number},
|
||||
lot_number_used
|
||||
)
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
%{label: gettext("CPR"), key: :cpr},
|
||||
price_paid_used
|
||||
)
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
%{label: gettext("Price paid"), key: :price_paid},
|
||||
price_paid_used
|
||||
)
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
%{label: gettext("% left"), key: :remaining},
|
||||
show_used
|
||||
|
@ -39,6 +39,13 @@
|
||||
) %>
|
||||
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :lot_number, gettext("Lot number"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :lot_number,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
) %>
|
||||
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :purchased_on, gettext("Purchased on"), class: "title text-lg text-primary-600") %>
|
||||
<%= date_input(f, :purchased_on,
|
||||
class: "input input-primary col-span-2",
|
||||
|
Reference in New Issue
Block a user