fix moving ammo between containers

This commit is contained in:
2022-11-10 21:45:50 -05:00
parent 0dbd1af553
commit 1c7721887f
24 changed files with 134 additions and 115 deletions

View File

@ -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.

View File

@ -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 """

View File

@ -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)

View File

@ -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 =

View File

@ -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)