fix moving ammo between containers
This commit is contained in:
@ -607,8 +607,12 @@ defmodule Cannery.Ammo do
|
||||
"""
|
||||
@spec update_ammo_group(AmmoGroup.t(), attrs :: map(), User.t()) ::
|
||||
{:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())}
|
||||
def update_ammo_group(%AmmoGroup{user_id: user_id} = ammo_group, attrs, %User{id: user_id}),
|
||||
do: ammo_group |> AmmoGroup.update_changeset(attrs) |> Repo.update()
|
||||
def update_ammo_group(
|
||||
%AmmoGroup{user_id: user_id} = ammo_group,
|
||||
attrs,
|
||||
%User{id: user_id} = user
|
||||
),
|
||||
do: ammo_group |> AmmoGroup.update_changeset(attrs, user) |> Repo.update()
|
||||
|
||||
@doc """
|
||||
Deletes a ammo_group.
|
||||
|
@ -10,7 +10,7 @@ defmodule Cannery.Ammo.AmmoGroup do
|
||||
import CanneryWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
alias Cannery.Ammo.{AmmoGroup, AmmoType}
|
||||
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers.Container}
|
||||
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers, Containers.Container}
|
||||
alias Ecto.{Changeset, UUID}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
@ -95,13 +95,24 @@ defmodule Cannery.Ammo.AmmoGroup do
|
||||
end
|
||||
|
||||
@doc false
|
||||
@spec update_changeset(t() | new_ammo_group(), attrs :: map()) ::
|
||||
@spec update_changeset(t() | new_ammo_group(), attrs :: map(), User.t()) ::
|
||||
Changeset.t(t() | new_ammo_group())
|
||||
def update_changeset(ammo_group, attrs) do
|
||||
def update_changeset(ammo_group, attrs, user) do
|
||||
ammo_group
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged])
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged, :container_id])
|
||||
|> validate_number(:count, greater_than_or_equal_to: 0)
|
||||
|> validate_required([:count, :staged])
|
||||
|> validate_container_id(user)
|
||||
|> validate_required([:count, :staged, :container_id])
|
||||
end
|
||||
|
||||
defp validate_container_id(changeset, user) do
|
||||
container_id = changeset |> Changeset.get_field(:container_id)
|
||||
|
||||
if container_id do
|
||||
Containers.get_container!(container_id, user)
|
||||
end
|
||||
|
||||
changeset
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
@ -22,7 +22,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
|
||||
assigns,
|
||||
socket
|
||||
) do
|
||||
changeset = ammo_group |> AmmoGroup.update_changeset(%{})
|
||||
changeset = ammo_group |> AmmoGroup.update_changeset(%{}, current_user)
|
||||
|
||||
containers =
|
||||
Containers.list_containers(current_user)
|
||||
|
@ -94,7 +94,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
|
||||
ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params)
|
||||
|
||||
action == :edit ->
|
||||
ammo_group |> AmmoGroup.update_changeset(ammo_group_params)
|
||||
ammo_group |> AmmoGroup.update_changeset(ammo_group_params, user)
|
||||
end
|
||||
|
||||
changeset =
|
||||
|
@ -9,12 +9,12 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
||||
|
||||
@impl true
|
||||
def mount(_params, _session, socket) do
|
||||
{:ok, socket |> assign(show_used: false) |> display_ammo_groups()}
|
||||
{:ok, socket |> assign(show_used: false)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do
|
||||
{:noreply, apply_action(socket, live_action, params)}
|
||||
{:noreply, apply_action(socket, live_action, params) |> display_ammo_groups()}
|
||||
end
|
||||
|
||||
defp apply_action(
|
||||
@ -52,7 +52,9 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
||||
end
|
||||
|
||||
defp apply_action(socket, :index, _params) do
|
||||
socket |> assign(:page_title, gettext("Ammo groups")) |> assign(:ammo_group, nil)
|
||||
socket
|
||||
|> assign(:page_title, gettext("Ammo groups"))
|
||||
|> assign(:ammo_group, nil)
|
||||
end
|
||||
|
||||
@impl true
|
||||
@ -87,7 +89,8 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|
||||
%{assigns: %{current_user: current_user, show_used: show_used}} = socket
|
||||
) do
|
||||
ammo_groups =
|
||||
Ammo.list_ammo_groups(current_user, show_used) |> Repo.preload([:ammo_type, :container])
|
||||
Ammo.list_ammo_groups(current_user, show_used)
|
||||
|> Repo.preload([:ammo_type, :container], force: true)
|
||||
|
||||
ammo_types_count = Ammo.get_ammo_types_count!(current_user)
|
||||
containers_count = Containers.get_containers_count!(current_user)
|
||||
|
Reference in New Issue
Block a user