forked from shibao/cannery
		
	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