forked from shibao/cannery
		
	remove all n+1 queries for real this time
This commit is contained in:
		@@ -4,6 +4,7 @@
 | 
				
			|||||||
- Only show historical ammo type information when displaying "Show used" in table
 | 
					- Only show historical ammo type information when displaying "Show used" in table
 | 
				
			||||||
- Only show historical ammo group information when displaying "Show used" in table
 | 
					- Only show historical ammo group information when displaying "Show used" in table
 | 
				
			||||||
- Fix some values not being sorted in tables properly
 | 
					- Fix some values not being sorted in tables properly
 | 
				
			||||||
 | 
					- Code quality improvements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# v0.8.5
 | 
					# v0.8.5
 | 
				
			||||||
- Add link in readme to github mirror
 | 
					- Add link in readme to github mirror
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -843,12 +843,39 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec get_percentage_remaining(AmmoGroup.t(), User.t()) :: non_neg_integer()
 | 
					  @spec get_percentage_remaining(AmmoGroup.t(), User.t()) :: non_neg_integer()
 | 
				
			||||||
  def get_percentage_remaining(%AmmoGroup{count: 0, user_id: user_id}, %User{id: user_id}) do
 | 
					  def get_percentage_remaining(%AmmoGroup{id: ammo_group_id} = ammo_group, user) do
 | 
				
			||||||
    0
 | 
					    [ammo_group]
 | 
				
			||||||
 | 
					    |> get_percentages_remaining(user)
 | 
				
			||||||
 | 
					    |> Map.fetch!(ammo_group_id)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def get_percentage_remaining(%AmmoGroup{count: count} = ammo_group, current_user) do
 | 
					  @doc """
 | 
				
			||||||
    round(count / get_original_count(ammo_group, current_user) * 100)
 | 
					  Calculates the percentages remaining of multiple ammo groups out of 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      iex> get_percentages_remaining(
 | 
				
			||||||
 | 
					      ...>   [%AmmoGroup{id: 123, count: 5, user_id: 456}],
 | 
				
			||||||
 | 
					      ...>   %User{id: 456}
 | 
				
			||||||
 | 
					      ...> )
 | 
				
			||||||
 | 
					      %{123 => 100}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  """
 | 
				
			||||||
 | 
					  @spec get_percentages_remaining([AmmoGroup.t()], User.t()) ::
 | 
				
			||||||
 | 
					          %{optional(AmmoGroup.id()) => non_neg_integer()}
 | 
				
			||||||
 | 
					  def get_percentages_remaining(ammo_groups, %User{id: user_id} = user) do
 | 
				
			||||||
 | 
					    original_counts = get_original_counts(ammo_groups, user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ammo_groups
 | 
				
			||||||
 | 
					    |> Map.new(fn %AmmoGroup{id: ammo_group_id, count: count, user_id: ^user_id} ->
 | 
				
			||||||
 | 
					      percentage =
 | 
				
			||||||
 | 
					        case count do
 | 
				
			||||||
 | 
					          0 -> 0
 | 
				
			||||||
 | 
					          count -> round(count / Map.fetch!(original_counts, ammo_group_id) * 100)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      {ammo_group_id, percentage}
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,7 +92,7 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
  Gets a single container.
 | 
					  Gets a single container.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Raises `Ecto.NoResultsError` if the Container does not exist.
 | 
					  Raises `KeyError` if the Container does not exist.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ## Examples
 | 
					  ## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -100,18 +100,37 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      %Container{}
 | 
					      %Container{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      iex> get_container!(456, %User{id: 123})
 | 
					      iex> get_container!(456, %User{id: 123})
 | 
				
			||||||
      ** (Ecto.NoResultsError)
 | 
					      ** (KeyError)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec get_container!(Container.id(), User.t()) :: Container.t()
 | 
					  @spec get_container!(Container.id(), User.t()) :: Container.t()
 | 
				
			||||||
  def get_container!(id, %User{id: user_id}) do
 | 
					  def get_container!(id, user) do
 | 
				
			||||||
    Repo.one!(
 | 
					    [id]
 | 
				
			||||||
 | 
					    |> get_containers(user)
 | 
				
			||||||
 | 
					    |> Map.fetch!(id)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @doc """
 | 
				
			||||||
 | 
					  Gets multiple containers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      iex> get_containers([123], %User{id: 123})
 | 
				
			||||||
 | 
					      %{123 => %Container{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  """
 | 
				
			||||||
 | 
					  @spec get_containers([Container.id()], User.t()) :: %{optional(Container.id()) => Container.t()}
 | 
				
			||||||
 | 
					  def get_containers(ids, %User{id: user_id}) do
 | 
				
			||||||
 | 
					    Repo.all(
 | 
				
			||||||
      from c in Container,
 | 
					      from c in Container,
 | 
				
			||||||
        where: c.user_id == ^user_id,
 | 
					        where: c.user_id == ^user_id,
 | 
				
			||||||
        where: c.id == ^id,
 | 
					        where: c.id in ^ids,
 | 
				
			||||||
        order_by: c.name,
 | 
					        order_by: c.name,
 | 
				
			||||||
        preload: ^@container_preloads
 | 
					        preload: ^@container_preloads,
 | 
				
			||||||
 | 
					        select: {c.id, c}
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    |> Map.new()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,14 +108,21 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
 | 
				
			|||||||
        [%{label: gettext("Ammo type"), key: :ammo_type} | columns]
 | 
					        [%{label: gettext("Ammo type"), key: :ammo_type} | columns]
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    containers =
 | 
				
			||||||
 | 
					      ammo_groups
 | 
				
			||||||
 | 
					      |> Enum.map(fn %{container_id: container_id} -> container_id end)
 | 
				
			||||||
 | 
					      |> Containers.get_containers(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    extra_data = %{
 | 
					    extra_data = %{
 | 
				
			||||||
      current_user: current_user,
 | 
					      current_user: current_user,
 | 
				
			||||||
      ammo_type: ammo_type,
 | 
					      ammo_type: ammo_type,
 | 
				
			||||||
      columns: columns,
 | 
					      columns: columns,
 | 
				
			||||||
      container: container,
 | 
					      container: container,
 | 
				
			||||||
 | 
					      containers: containers,
 | 
				
			||||||
      original_counts: Ammo.get_original_counts(ammo_groups, current_user),
 | 
					      original_counts: Ammo.get_original_counts(ammo_groups, current_user),
 | 
				
			||||||
      cprs: Ammo.get_cprs(ammo_groups, current_user),
 | 
					      cprs: Ammo.get_cprs(ammo_groups, current_user),
 | 
				
			||||||
      last_used_dates: ActivityLog.get_last_used_dates(ammo_groups, current_user),
 | 
					      last_used_dates: ActivityLog.get_last_used_dates(ammo_groups, current_user),
 | 
				
			||||||
 | 
					      percentages_remaining: Ammo.get_percentages_remaining(ammo_groups, current_user),
 | 
				
			||||||
      actions: actions,
 | 
					      actions: actions,
 | 
				
			||||||
      range: range
 | 
					      range: range
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -202,8 +209,12 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
 | 
				
			|||||||
     """}
 | 
					     """}
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  defp get_value_for_key(:remaining, ammo_group, %{current_user: current_user}) do
 | 
					  defp get_value_for_key(
 | 
				
			||||||
    percentage = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					         :remaining,
 | 
				
			||||||
 | 
					         %{id: ammo_group_id},
 | 
				
			||||||
 | 
					         %{percentages_remaining: percentages_remaining}
 | 
				
			||||||
 | 
					       ) do
 | 
				
			||||||
 | 
					    percentage = Map.fetch!(percentages_remaining, ammo_group_id)
 | 
				
			||||||
    {percentage, gettext("%{percentage}%", percentage: percentage)}
 | 
					    {percentage, gettext("%{percentage}%", percentage: percentage)}
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -220,12 +231,13 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do
 | 
				
			|||||||
  defp get_value_for_key(
 | 
					  defp get_value_for_key(
 | 
				
			||||||
         :container,
 | 
					         :container,
 | 
				
			||||||
         %{container_id: container_id} = ammo_group,
 | 
					         %{container_id: container_id} = ammo_group,
 | 
				
			||||||
         %{container: container, current_user: current_user}
 | 
					         %{container: container_block, containers: containers}
 | 
				
			||||||
       ) do
 | 
					       ) do
 | 
				
			||||||
 | 
					    container = %{name: container_name} = Map.fetch!(containers, container_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assigns = %{
 | 
					    assigns = %{
 | 
				
			||||||
      container:
 | 
					      container: container,
 | 
				
			||||||
        %{name: container_name} = container_id |> Containers.get_container!(current_user),
 | 
					      container_block: container_block,
 | 
				
			||||||
      container_block: container,
 | 
					 | 
				
			||||||
      ammo_group: ammo_group
 | 
					      ammo_group: ammo_group
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ defmodule CanneryWeb.CoreComponents do
 | 
				
			|||||||
  import CanneryWeb.{Gettext, ViewHelpers}
 | 
					  import CanneryWeb.{Gettext, ViewHelpers}
 | 
				
			||||||
  alias Cannery.{Accounts, Accounts.Invite, Accounts.User}
 | 
					  alias Cannery.{Accounts, Accounts.Invite, Accounts.User}
 | 
				
			||||||
  alias Cannery.{Ammo, Ammo.AmmoGroup}
 | 
					  alias Cannery.{Ammo, Ammo.AmmoGroup}
 | 
				
			||||||
  alias Cannery.{Containers, Containers.Container, Containers.Tag}
 | 
					  alias Cannery.{Containers.Container, Containers.Tag}
 | 
				
			||||||
  alias CanneryWeb.{Endpoint, HomeLive}
 | 
					  alias CanneryWeb.{Endpoint, HomeLive}
 | 
				
			||||||
  alias CanneryWeb.Router.Helpers, as: Routes
 | 
					  alias CanneryWeb.Router.Helpers, as: Routes
 | 
				
			||||||
  alias Phoenix.LiveView.{JS, Rendered}
 | 
					  alias Phoenix.LiveView.{JS, Rendered}
 | 
				
			||||||
@@ -91,7 +91,7 @@ defmodule CanneryWeb.CoreComponents do
 | 
				
			|||||||
  attr :original_count, :integer, default: nil
 | 
					  attr :original_count, :integer, default: nil
 | 
				
			||||||
  attr :cpr, :integer, default: nil
 | 
					  attr :cpr, :integer, default: nil
 | 
				
			||||||
  attr :last_used_date, Date, default: nil
 | 
					  attr :last_used_date, Date, default: nil
 | 
				
			||||||
  attr :show_container, :boolean, default: false
 | 
					  attr :container, Container, default: nil
 | 
				
			||||||
  slot(:inner_block)
 | 
					  slot(:inner_block)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def ammo_group_card(assigns)
 | 
					  def ammo_group_card(assigns)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,17 +50,11 @@
 | 
				
			|||||||
      <%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
 | 
					      <%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
 | 
				
			||||||
    </span>
 | 
					    </span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <span
 | 
					    <span :if={@container} class="rounded-lg title text-lg">
 | 
				
			||||||
      :if={@show_container && Containers.get_container!(@ammo_group.container_id, @current_user)}
 | 
					 | 
				
			||||||
      class="rounded-lg title text-lg"
 | 
					 | 
				
			||||||
    >
 | 
					 | 
				
			||||||
      <%= gettext("Container:") %>
 | 
					      <%= gettext("Container:") %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <.link
 | 
					      <.link navigate={Routes.container_show_path(Endpoint, :show, @container)} class="link">
 | 
				
			||||||
        navigate={Routes.container_show_path(Endpoint, :show, @ammo_group.container_id)}
 | 
					        <%= @container.name %>
 | 
				
			||||||
        class="link"
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <%= Containers.get_container!(@ammo_group.container_id, @current_user).name %>
 | 
					 | 
				
			||||||
      </.link>
 | 
					      </.link>
 | 
				
			||||||
    </span>
 | 
					    </span>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,18 +32,17 @@ defmodule CanneryWeb.ExportController do
 | 
				
			|||||||
    used_counts = ammo_groups |> ActivityLog.get_used_counts(current_user)
 | 
					    used_counts = ammo_groups |> ActivityLog.get_used_counts(current_user)
 | 
				
			||||||
    original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
 | 
					    original_counts = ammo_groups |> Ammo.get_original_counts(current_user)
 | 
				
			||||||
    cprs = ammo_groups |> Ammo.get_cprs(current_user)
 | 
					    cprs = ammo_groups |> Ammo.get_cprs(current_user)
 | 
				
			||||||
 | 
					    percentages_remaining = ammo_groups |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ammo_groups =
 | 
					    ammo_groups =
 | 
				
			||||||
      ammo_groups
 | 
					      ammo_groups
 | 
				
			||||||
      |> Enum.map(fn %{id: ammo_group_id} = ammo_group ->
 | 
					      |> Enum.map(fn %{id: ammo_group_id} = ammo_group ->
 | 
				
			||||||
        percentage_remaining = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ammo_group
 | 
					        ammo_group
 | 
				
			||||||
        |> Jason.encode!()
 | 
					        |> Jason.encode!()
 | 
				
			||||||
        |> Jason.decode!()
 | 
					        |> Jason.decode!()
 | 
				
			||||||
        |> Map.merge(%{
 | 
					        |> Map.merge(%{
 | 
				
			||||||
          "used_count" => Map.get(used_counts, ammo_group_id),
 | 
					          "used_count" => Map.get(used_counts, ammo_group_id),
 | 
				
			||||||
          "percentage_remaining" => percentage_remaining,
 | 
					          "percentage_remaining" => Map.fetch!(percentages_remaining, ammo_group_id),
 | 
				
			||||||
          "original_count" => Map.get(original_counts, ammo_group_id),
 | 
					          "original_count" => Map.get(original_counts, ammo_group_id),
 | 
				
			||||||
          "cpr" => Map.get(cprs, ammo_group_id)
 | 
					          "cpr" => Map.get(cprs, ammo_group_id)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
 | 
				
			|||||||
  """
 | 
					  """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  use CanneryWeb, :live_view
 | 
					  use CanneryWeb, :live_view
 | 
				
			||||||
  alias Cannery.{ActivityLog, Ammo, Ammo.AmmoType}
 | 
					  alias Cannery.{ActivityLog, Ammo, Ammo.AmmoType, Containers}
 | 
				
			||||||
  alias CanneryWeb.Endpoint
 | 
					  alias CanneryWeb.Endpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @fields_list [
 | 
					  @fields_list [
 | 
				
			||||||
@@ -104,11 +104,17 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
 | 
				
			|||||||
        :edit -> gettext("Edit %{ammo_type_name}", ammo_type_name: ammo_type_name)
 | 
					        :edit -> gettext("Edit %{ammo_type_name}", ammo_type_name: ammo_type_name)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    containers =
 | 
				
			||||||
 | 
					      ammo_groups
 | 
				
			||||||
 | 
					      |> Enum.map(fn %{container_id: container_id} -> container_id end)
 | 
				
			||||||
 | 
					      |> Containers.get_containers(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    socket
 | 
					    socket
 | 
				
			||||||
    |> assign(
 | 
					    |> assign(
 | 
				
			||||||
      page_title: page_title,
 | 
					      page_title: page_title,
 | 
				
			||||||
      ammo_type: ammo_type,
 | 
					      ammo_type: ammo_type,
 | 
				
			||||||
      ammo_groups: ammo_groups,
 | 
					      ammo_groups: ammo_groups,
 | 
				
			||||||
 | 
					      containers: containers,
 | 
				
			||||||
      cprs: ammo_groups |> Ammo.get_cprs(current_user),
 | 
					      cprs: ammo_groups |> Ammo.get_cprs(current_user),
 | 
				
			||||||
      last_used_dates: ammo_groups |> ActivityLog.get_last_used_dates(current_user),
 | 
					      last_used_dates: ammo_groups |> ActivityLog.get_last_used_dates(current_user),
 | 
				
			||||||
      avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type(current_user),
 | 
					      avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type(current_user),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -184,13 +184,13 @@
 | 
				
			|||||||
      <% else %>
 | 
					      <% else %>
 | 
				
			||||||
        <div class="flex flex-wrap justify-center items-stretch">
 | 
					        <div class="flex flex-wrap justify-center items-stretch">
 | 
				
			||||||
          <.ammo_group_card
 | 
					          <.ammo_group_card
 | 
				
			||||||
            :for={%{id: ammo_group_id} = ammo_group <- @ammo_groups}
 | 
					            :for={%{id: ammo_group_id, container_id: container_id} = ammo_group <- @ammo_groups}
 | 
				
			||||||
            ammo_group={ammo_group}
 | 
					            ammo_group={ammo_group}
 | 
				
			||||||
            original_count={@original_counts && Map.fetch!(@original_counts, ammo_group_id)}
 | 
					            original_count={@original_counts && Map.fetch!(@original_counts, ammo_group_id)}
 | 
				
			||||||
            cpr={Map.get(@cprs, ammo_group_id)}
 | 
					            cpr={Map.get(@cprs, ammo_group_id)}
 | 
				
			||||||
            last_used_date={Map.get(@last_used_dates, ammo_group_id)}
 | 
					            last_used_date={Map.get(@last_used_dates, ammo_group_id)}
 | 
				
			||||||
            current_user={@current_user}
 | 
					            current_user={@current_user}
 | 
				
			||||||
            show_container={true}
 | 
					            container={Map.fetch!(@containers, container_id)}
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      <% end %>
 | 
					      <% end %>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -525,8 +525,8 @@ msgstr "Kein weiterer Behälter"
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr "Schießkladde"
 | 
					msgstr "Schießkladde"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -620,8 +620,8 @@ msgstr "Editiere %{name} Tags"
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr "Patronen:"
 | 
					msgstr "Patronen:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -796,7 +796,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
					msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format, fuzzy
 | 
					#, elixir-autogen, elixir-format, fuzzy
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr "Behälter"
 | 
					msgstr "Behälter"
 | 
				
			||||||
@@ -809,7 +809,7 @@ msgstr "Behälter"
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -996,7 +996,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr "%{name} bearbeiten"
 | 
					msgstr "%{name} bearbeiten"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1042,7 +1042,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ msgstr ""
 | 
				
			|||||||
## Run "mix gettext.extract" to bring this file up to
 | 
					## Run "mix gettext.extract" to bring this file up to
 | 
				
			||||||
## date. Leave "msgstr"s empty as changing them here has no
 | 
					## date. Leave "msgstr"s empty as changing them here has no
 | 
				
			||||||
## effect: edit them in PO (.po) files instead.
 | 
					## effect: edit them in PO (.po) files instead.
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr "Behälter muss vor dem Löschen leer sein"
 | 
					msgstr "Behälter muss vor dem Löschen leer sein"
 | 
				
			||||||
@@ -172,7 +172,7 @@ msgstr ""
 | 
				
			|||||||
"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
 | 
					"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
 | 
				
			||||||
"%{multiplier}"
 | 
					"%{multiplier}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -519,8 +519,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -614,8 +614,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -790,7 +790,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
					msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -803,7 +803,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -990,7 +990,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1036,7 +1036,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -519,8 +519,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -614,8 +614,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -790,7 +790,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
					msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format, fuzzy
 | 
					#, elixir-autogen, elixir-format, fuzzy
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -803,7 +803,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -990,7 +990,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1036,7 +1036,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ msgid ""
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Language: en\n"
 | 
					"Language: en\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -155,7 +155,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
					msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -154,7 +154,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
					msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -526,8 +526,8 @@ msgstr "No hay otros contenedores"
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr "Registro de tiros"
 | 
					msgstr "Registro de tiros"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -621,8 +621,8 @@ msgstr "Editar etiquetas de %{name}"
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr "Balas:"
 | 
					msgstr "Balas:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -798,7 +798,7 @@ msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Deje \"Usos restantes\" en blanco para hacer las invitaciónes ilimitadas"
 | 
					"Deje \"Usos restantes\" en blanco para hacer las invitaciónes ilimitadas"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr "Contenedor:"
 | 
					msgstr "Contenedor:"
 | 
				
			||||||
@@ -811,7 +811,7 @@ msgstr "Contenedor:"
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr "Mostrar usadas"
 | 
					msgstr "Mostrar usadas"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -998,7 +998,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr "Editar %{ammo_type_name}"
 | 
					msgstr "Editar %{ammo_type_name}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1044,7 +1044,7 @@ msgstr "Usada por última vez en"
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr "Usada por última vez en:"
 | 
					msgstr "Usada por última vez en:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr "Nunca usada"
 | 
					msgstr "Nunca usada"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ msgstr ""
 | 
				
			|||||||
## Run "mix gettext.extract" to bring this file up to
 | 
					## Run "mix gettext.extract" to bring this file up to
 | 
				
			||||||
## date. Leave "msgstr"s empty as changing them here has no
 | 
					## date. Leave "msgstr"s empty as changing them here has no
 | 
				
			||||||
## effect: edit them in PO (.po) files instead.
 | 
					## effect: edit them in PO (.po) files instead.
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr "El contenedor debe estar vacío antes de ser borrado"
 | 
					msgstr "El contenedor debe estar vacío antes de ser borrado"
 | 
				
			||||||
@@ -170,7 +170,7 @@ msgstr "No se ha podido procesar el número de copias"
 | 
				
			|||||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
					msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
				
			||||||
msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier"
 | 
					msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr "Multiplicador inválido"
 | 
					msgstr "Multiplicador inválido"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -527,8 +527,8 @@ msgstr "Aucun autre conteneur"
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr "Évènements de tir"
 | 
					msgstr "Évènements de tir"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -622,8 +622,8 @@ msgstr "Éditer les tags de %{name}"
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr "Cartouches :"
 | 
					msgstr "Cartouches :"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -799,7 +799,7 @@ msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Laissez \"Utilisations restantes\" vide pour rendre l'invitation illimitée"
 | 
					"Laissez \"Utilisations restantes\" vide pour rendre l'invitation illimitée"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format, fuzzy
 | 
					#, elixir-autogen, elixir-format, fuzzy
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr "Conteneur"
 | 
					msgstr "Conteneur"
 | 
				
			||||||
@@ -812,7 +812,7 @@ msgstr "Conteneur"
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -999,7 +999,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr "Éditer %{name}"
 | 
					msgstr "Éditer %{name}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1045,7 +1045,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ msgstr ""
 | 
				
			|||||||
# # Run "mix gettext.extract" to bring this file up to
 | 
					# # Run "mix gettext.extract" to bring this file up to
 | 
				
			||||||
# # date. Leave "msgstr"s empty as changing them here has no
 | 
					# # date. Leave "msgstr"s empty as changing them here has no
 | 
				
			||||||
# # effect: edit them in PO (.po) files instead.
 | 
					# # effect: edit them in PO (.po) files instead.
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr "Le conteneur doit être vide pour être supprimé"
 | 
					msgstr "Le conteneur doit être vide pour être supprimé"
 | 
				
			||||||
@@ -171,7 +171,7 @@ msgstr "Impossible d'analyser le nombre de copies"
 | 
				
			|||||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
					msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
				
			||||||
msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
 | 
					msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr "Multiplicateur invalide"
 | 
					msgstr "Multiplicateur invalide"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -521,8 +521,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Shot log"
 | 
					msgid "Shot log"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:173
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:180
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:251
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:263
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:235
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50
 | 
				
			||||||
@@ -616,8 +616,8 @@ msgstr ""
 | 
				
			|||||||
msgid "Rounds:"
 | 
					msgid "Rounds:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:170
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:177
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:247
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:259
 | 
				
			||||||
#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
					#: lib/cannery_web/components/ammo_type_table_component.ex:234
 | 
				
			||||||
#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
					#: lib/cannery_web/live/ammo_type_live/show.html.heex:139
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
@@ -792,7 +792,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
					msgid "Leave \"Uses left\" blank to make invite unlimited"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:57
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:54
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container:"
 | 
					msgid "Container:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@@ -805,7 +805,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Show used"
 | 
					msgid "Show used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:207
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:218
 | 
				
			||||||
#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
					#: lib/cannery_web/live/ammo_group_live/show.html.heex:19
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "%{percentage}%"
 | 
					msgid "%{percentage}%"
 | 
				
			||||||
@@ -992,7 +992,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Edit %{ammo_type_name}"
 | 
					msgid "Edit %{ammo_type_name}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:255
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:267
 | 
				
			||||||
#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
					#: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Empty"
 | 
					msgid "Empty"
 | 
				
			||||||
@@ -1038,7 +1038,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Last used on:"
 | 
					msgid "Last used on:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery_web/components/ammo_group_table_component.ex:191
 | 
					#: lib/cannery_web/components/ammo_group_table_component.ex:198
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Never used"
 | 
					msgid "Never used"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ msgstr ""
 | 
				
			|||||||
## Run "mix gettext.extract" to bring this file up to
 | 
					## Run "mix gettext.extract" to bring this file up to
 | 
				
			||||||
## date. Leave "msgstr"s empty as changing them here has no
 | 
					## date. Leave "msgstr"s empty as changing them here has no
 | 
				
			||||||
## effect: edit them in PO (.po) files instead.
 | 
					## effect: edit them in PO (.po) files instead.
 | 
				
			||||||
#: lib/cannery/containers.ex:201
 | 
					#: lib/cannery/containers.ex:220
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Container must be empty before deleting"
 | 
					msgid "Container must be empty before deleting"
 | 
				
			||||||
msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
 | 
					msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
 | 
				
			||||||
@@ -170,7 +170,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
					msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: lib/cannery/ammo.ex:1016
 | 
					#: lib/cannery/ammo.ex:1043
 | 
				
			||||||
#, elixir-autogen, elixir-format
 | 
					#, elixir-autogen, elixir-format
 | 
				
			||||||
msgid "Invalid multiplier"
 | 
					msgid "Invalid multiplier"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert Ammo.list_ammo_types(current_user) == [ammo_type]
 | 
					      assert Ammo.list_ammo_types(current_user) == [ammo_type]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "list_ammo_types/1 returns relevant ammo_types for a user",
 | 
					    test "list_ammo_types/2 returns relevant ammo_types for a user",
 | 
				
			||||||
         %{current_user: current_user} do
 | 
					         %{current_user: current_user} do
 | 
				
			||||||
      ammo_type_a =
 | 
					      ammo_type_a =
 | 
				
			||||||
        %{"name" => "bullets", "desc" => "has some pews in it", "grains" => 5}
 | 
					        %{"name" => "bullets", "desc" => "has some pews in it", "grains" => 5}
 | 
				
			||||||
@@ -89,12 +89,12 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert Ammo.list_ammo_types("tracer", current_user) == [ammo_type_c]
 | 
					      assert Ammo.list_ammo_types("tracer", current_user) == [ammo_type_c]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_ammo_type!/1 returns the ammo_type with given id",
 | 
					    test "get_ammo_type!/2 returns the ammo_type with given id",
 | 
				
			||||||
         %{ammo_type: ammo_type, current_user: current_user} do
 | 
					         %{ammo_type: ammo_type, current_user: current_user} do
 | 
				
			||||||
      assert Ammo.get_ammo_type!(ammo_type.id, current_user) == ammo_type
 | 
					      assert Ammo.get_ammo_type!(ammo_type.id, current_user) == ammo_type
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_ammo_type/1 with valid data creates a ammo_type",
 | 
					    test "create_ammo_type/2 with valid data creates a ammo_type",
 | 
				
			||||||
         %{current_user: current_user} do
 | 
					         %{current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %AmmoType{} = ammo_type} = Ammo.create_ammo_type(@valid_attrs, current_user)
 | 
					      assert {:ok, %AmmoType{} = ammo_type} = Ammo.create_ammo_type(@valid_attrs, current_user)
 | 
				
			||||||
      assert ammo_type.bullet_type == "some bullet_type"
 | 
					      assert ammo_type.bullet_type == "some bullet_type"
 | 
				
			||||||
@@ -105,12 +105,12 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert ammo_type.grains == 120
 | 
					      assert ammo_type.grains == 120
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_ammo_type/1 with invalid data returns error changeset",
 | 
					    test "create_ammo_type/2 with invalid data returns error changeset",
 | 
				
			||||||
         %{current_user: current_user} do
 | 
					         %{current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} = Ammo.create_ammo_type(@invalid_attrs, current_user)
 | 
					      assert {:error, %Changeset{}} = Ammo.create_ammo_type(@invalid_attrs, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_ammo_type/2 with valid data updates the ammo_type",
 | 
					    test "update_ammo_type/3 with valid data updates the ammo_type",
 | 
				
			||||||
         %{ammo_type: ammo_type, current_user: current_user} do
 | 
					         %{ammo_type: ammo_type, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %AmmoType{} = ammo_type} =
 | 
					      assert {:ok, %AmmoType{} = ammo_type} =
 | 
				
			||||||
               Ammo.update_ammo_type(ammo_type, @update_attrs, current_user)
 | 
					               Ammo.update_ammo_type(ammo_type, @update_attrs, current_user)
 | 
				
			||||||
@@ -123,7 +123,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert ammo_type.grains == 456
 | 
					      assert ammo_type.grains == 456
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_ammo_type/2 with invalid data returns error changeset",
 | 
					    test "update_ammo_type/3 with invalid data returns error changeset",
 | 
				
			||||||
         %{ammo_type: ammo_type, current_user: current_user} do
 | 
					         %{ammo_type: ammo_type, current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} =
 | 
					      assert {:error, %Changeset{}} =
 | 
				
			||||||
               Ammo.update_ammo_type(ammo_type, @invalid_attrs, current_user)
 | 
					               Ammo.update_ammo_type(ammo_type, @invalid_attrs, current_user)
 | 
				
			||||||
@@ -131,7 +131,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert ammo_type == Ammo.get_ammo_type!(ammo_type.id, current_user)
 | 
					      assert ammo_type == Ammo.get_ammo_type!(ammo_type.id, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "delete_ammo_type/1 deletes the ammo_type",
 | 
					    test "delete_ammo_type/2 deletes the ammo_type",
 | 
				
			||||||
         %{ammo_type: ammo_type, current_user: current_user} do
 | 
					         %{ammo_type: ammo_type, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user)
 | 
					      assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user)
 | 
				
			||||||
      assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end
 | 
					      assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end
 | 
				
			||||||
@@ -785,7 +785,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert %{^another_ammo_type_id => 1} = ammo_groups_count
 | 
					      assert %{^another_ammo_type_id => 1} = ammo_groups_count
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "list_staged_ammo_groups/2 returns all ammo_groups that are staged",
 | 
					    test "list_staged_ammo_groups/1 returns all ammo_groups that are staged",
 | 
				
			||||||
         %{
 | 
					         %{
 | 
				
			||||||
           ammo_type: ammo_type,
 | 
					           ammo_type: ammo_type,
 | 
				
			||||||
           container: container,
 | 
					           container: container,
 | 
				
			||||||
@@ -797,7 +797,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert Ammo.list_staged_ammo_groups(current_user) == [another_ammo_group]
 | 
					      assert Ammo.list_staged_ammo_groups(current_user) == [another_ammo_group]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_ammo_group!/1 returns the ammo_group with given id",
 | 
					    test "get_ammo_group!/2 returns the ammo_group with given id",
 | 
				
			||||||
         %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
 | 
					         %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
 | 
				
			||||||
      assert Ammo.get_ammo_group!(ammo_group_id, current_user) == ammo_group
 | 
					      assert Ammo.get_ammo_group!(ammo_group_id, current_user) == ammo_group
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@@ -861,7 +861,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
               |> Ammo.create_ammo_groups(1, current_user)
 | 
					               |> Ammo.create_ammo_groups(1, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_ammo_group/2 with valid data updates the ammo_group",
 | 
					    test "update_ammo_group/3 with valid data updates the ammo_group",
 | 
				
			||||||
         %{ammo_group: ammo_group, current_user: current_user} do
 | 
					         %{ammo_group: ammo_group, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %AmmoGroup{} = ammo_group} =
 | 
					      assert {:ok, %AmmoGroup{} = ammo_group} =
 | 
				
			||||||
               Ammo.update_ammo_group(ammo_group, @update_attrs, current_user)
 | 
					               Ammo.update_ammo_group(ammo_group, @update_attrs, current_user)
 | 
				
			||||||
@@ -871,7 +871,7 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert ammo_group.price_paid == 456.7
 | 
					      assert ammo_group.price_paid == 456.7
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_ammo_group/2 with invalid data returns error changeset",
 | 
					    test "update_ammo_group/3 with invalid data returns error changeset",
 | 
				
			||||||
         %{ammo_group: ammo_group, current_user: current_user} do
 | 
					         %{ammo_group: ammo_group, current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} =
 | 
					      assert {:error, %Changeset{}} =
 | 
				
			||||||
               Ammo.update_ammo_group(ammo_group, @invalid_attrs, current_user)
 | 
					               Ammo.update_ammo_group(ammo_group, @invalid_attrs, current_user)
 | 
				
			||||||
@@ -879,13 +879,13 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert ammo_group == Ammo.get_ammo_group!(ammo_group.id, current_user)
 | 
					      assert ammo_group == Ammo.get_ammo_group!(ammo_group.id, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "delete_ammo_group/1 deletes the ammo_group",
 | 
					    test "delete_ammo_group/2 deletes the ammo_group",
 | 
				
			||||||
         %{ammo_group: ammo_group, current_user: current_user} do
 | 
					         %{ammo_group: ammo_group, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %AmmoGroup{}} = Ammo.delete_ammo_group(ammo_group, current_user)
 | 
					      assert {:ok, %AmmoGroup{}} = Ammo.delete_ammo_group(ammo_group, current_user)
 | 
				
			||||||
      assert_raise KeyError, fn -> Ammo.get_ammo_group!(ammo_group.id, current_user) end
 | 
					      assert_raise KeyError, fn -> Ammo.get_ammo_group!(ammo_group.id, current_user) end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_percentage_remaining/1 gets accurate total round count",
 | 
					    test "get_percentage_remaining/2 gets accurate total round count",
 | 
				
			||||||
         %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
 | 
					         %{ammo_group: %{id: ammo_group_id} = ammo_group, current_user: current_user} do
 | 
				
			||||||
      assert 100 = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					      assert 100 = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -902,6 +902,53 @@ defmodule Cannery.AmmoTest do
 | 
				
			|||||||
      assert 0 = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					      assert 0 = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test "get_percentages_remaining/2 gets accurate total round count", %{
 | 
				
			||||||
 | 
					      ammo_group: %{id: ammo_group_id} = ammo_group,
 | 
				
			||||||
 | 
					      ammo_type: ammo_type,
 | 
				
			||||||
 | 
					      container: container,
 | 
				
			||||||
 | 
					      current_user: current_user
 | 
				
			||||||
 | 
					    } do
 | 
				
			||||||
 | 
					      assert %{ammo_group_id => 100} ==
 | 
				
			||||||
 | 
					               [ammo_group] |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      {1, [%{id: another_ammo_group_id} = another_ammo_group]} =
 | 
				
			||||||
 | 
					        %{"count" => 50, "price_paid" => 36.1}
 | 
				
			||||||
 | 
					        |> ammo_group_fixture(ammo_type, container, current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      percentages =
 | 
				
			||||||
 | 
					        [ammo_group, another_ammo_group] |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assert %{^ammo_group_id => 100} = percentages
 | 
				
			||||||
 | 
					      assert %{^another_ammo_group_id => 100} = percentages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      shot_group_fixture(%{"count" => 14}, current_user, ammo_group)
 | 
				
			||||||
 | 
					      ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      percentages =
 | 
				
			||||||
 | 
					        [ammo_group, another_ammo_group] |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assert %{^ammo_group_id => 72} = percentages
 | 
				
			||||||
 | 
					      assert %{^another_ammo_group_id => 100} = percentages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      shot_group_fixture(%{"count" => 11}, current_user, ammo_group)
 | 
				
			||||||
 | 
					      ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      percentages =
 | 
				
			||||||
 | 
					        [ammo_group, another_ammo_group] |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assert %{^ammo_group_id => 50} = percentages
 | 
				
			||||||
 | 
					      assert %{^another_ammo_group_id => 100} = percentages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      shot_group_fixture(%{"count" => 25}, current_user, ammo_group)
 | 
				
			||||||
 | 
					      ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      percentages =
 | 
				
			||||||
 | 
					        [ammo_group, another_ammo_group] |> Ammo.get_percentages_remaining(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assert %{^ammo_group_id => 0} = percentages
 | 
				
			||||||
 | 
					      assert %{^another_ammo_group_id => 100} = percentages
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_cpr/2 gets accurate cpr",
 | 
					    test "get_cpr/2 gets accurate cpr",
 | 
				
			||||||
         %{ammo_type: ammo_type, container: container, current_user: current_user} do
 | 
					         %{ammo_type: ammo_type, container: container, current_user: current_user} do
 | 
				
			||||||
      {1, [ammo_group]} = ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
 | 
					      {1, [ammo_group]} = ammo_group_fixture(%{"count" => 1}, ammo_type, container, current_user)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,12 +90,24 @@ defmodule Cannery.ContainersTest do
 | 
				
			|||||||
      assert Containers.list_containers("asajslkdflskdf", current_user) == []
 | 
					      assert Containers.list_containers("asajslkdflskdf", current_user) == []
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_container!/1 returns the container with given id",
 | 
					    test "get_container!/2 returns the container with given id",
 | 
				
			||||||
         %{current_user: current_user, container: container} do
 | 
					         %{current_user: current_user, container: container} do
 | 
				
			||||||
      assert Containers.get_container!(container.id, current_user) == container
 | 
					      assert Containers.get_container!(container.id, current_user) == container
 | 
				
			||||||
 | 
					      assert_raise KeyError, fn -> Containers.get_container!(current_user.id, current_user) end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_container/1 with valid data creates a container", %{current_user: current_user} do
 | 
					    test "get_containers/2 returns the container with given id",
 | 
				
			||||||
 | 
					         %{current_user: current_user, container: %{id: container_id} = container} do
 | 
				
			||||||
 | 
					      assert %{container_id => container} ==
 | 
				
			||||||
 | 
					               Containers.get_containers([container_id], current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      %{id: another_container_id} = another_container = container_fixture(current_user)
 | 
				
			||||||
 | 
					      containers = [container_id, another_container_id] |> Containers.get_containers(current_user)
 | 
				
			||||||
 | 
					      assert %{^container_id => ^container} = containers
 | 
				
			||||||
 | 
					      assert %{^another_container_id => ^another_container} = containers
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test "create_container/2 with valid data creates a container", %{current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %Container{} = container} =
 | 
					      assert {:ok, %Container{} = container} =
 | 
				
			||||||
               @valid_attrs |> Containers.create_container(current_user)
 | 
					               @valid_attrs |> Containers.create_container(current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,12 +118,12 @@ defmodule Cannery.ContainersTest do
 | 
				
			|||||||
      assert container.user_id == current_user.id
 | 
					      assert container.user_id == current_user.id
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_container/1 with invalid data returns error changeset",
 | 
					    test "create_container/2 with invalid data returns error changeset",
 | 
				
			||||||
         %{current_user: current_user} do
 | 
					         %{current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} = @invalid_attrs |> Containers.create_container(current_user)
 | 
					      assert {:error, %Changeset{}} = @invalid_attrs |> Containers.create_container(current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_container/2 with valid data updates the container",
 | 
					    test "update_container/3 with valid data updates the container",
 | 
				
			||||||
         %{current_user: current_user, container: container} do
 | 
					         %{current_user: current_user, container: container} do
 | 
				
			||||||
      assert {:ok, %Container{} = container} =
 | 
					      assert {:ok, %Container{} = container} =
 | 
				
			||||||
               Containers.update_container(container, current_user, @update_attrs)
 | 
					               Containers.update_container(container, current_user, @update_attrs)
 | 
				
			||||||
@@ -122,7 +134,7 @@ defmodule Cannery.ContainersTest do
 | 
				
			|||||||
      assert container.type == "some updated type"
 | 
					      assert container.type == "some updated type"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_container/2 with invalid data returns error changeset",
 | 
					    test "update_container/3 with invalid data returns error changeset",
 | 
				
			||||||
         %{current_user: current_user, container: container} do
 | 
					         %{current_user: current_user, container: container} do
 | 
				
			||||||
      assert {:error, %Changeset{}} =
 | 
					      assert {:error, %Changeset{}} =
 | 
				
			||||||
               Containers.update_container(container, current_user, @invalid_attrs)
 | 
					               Containers.update_container(container, current_user, @invalid_attrs)
 | 
				
			||||||
@@ -130,11 +142,11 @@ defmodule Cannery.ContainersTest do
 | 
				
			|||||||
      assert container == Containers.get_container!(container.id, current_user)
 | 
					      assert container == Containers.get_container!(container.id, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "delete_container/1 deletes the container",
 | 
					    test "delete_container/2 deletes the container",
 | 
				
			||||||
         %{current_user: current_user, container: container} do
 | 
					         %{current_user: current_user, container: container} do
 | 
				
			||||||
      assert {:ok, %Container{}} = Containers.delete_container(container, current_user)
 | 
					      assert {:ok, %Container{}} = Containers.delete_container(container, current_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      assert_raise Ecto.NoResultsError, fn ->
 | 
					      assert_raise KeyError, fn ->
 | 
				
			||||||
        Containers.get_container!(container.id, current_user)
 | 
					        Containers.get_container!(container.id, current_user)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@@ -168,36 +180,36 @@ defmodule Cannery.ContainersTest do
 | 
				
			|||||||
      assert Containers.list_tags("hollows", current_user) == [tag_b]
 | 
					      assert Containers.list_tags("hollows", current_user) == [tag_b]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "get_tag!/1 returns the tag with given id", %{tag: tag, current_user: current_user} do
 | 
					    test "get_tag!/2 returns the tag with given id", %{tag: tag, current_user: current_user} do
 | 
				
			||||||
      assert Containers.get_tag!(tag.id, current_user) == tag
 | 
					      assert Containers.get_tag!(tag.id, current_user) == tag
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_tag/1 with valid data creates a tag", %{current_user: current_user} do
 | 
					    test "create_tag/2 with valid data creates a tag", %{current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %Tag{} = tag} = Containers.create_tag(@valid_tag_attrs, current_user)
 | 
					      assert {:ok, %Tag{} = tag} = Containers.create_tag(@valid_tag_attrs, current_user)
 | 
				
			||||||
      assert tag.bg_color == "some bg-color"
 | 
					      assert tag.bg_color == "some bg-color"
 | 
				
			||||||
      assert tag.name == "some name"
 | 
					      assert tag.name == "some name"
 | 
				
			||||||
      assert tag.text_color == "some text-color"
 | 
					      assert tag.text_color == "some text-color"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "create_tag/1 with invalid data returns error changeset",
 | 
					    test "create_tag/2 with invalid data returns error changeset",
 | 
				
			||||||
         %{current_user: current_user} do
 | 
					         %{current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} = Containers.create_tag(@invalid_tag_attrs, current_user)
 | 
					      assert {:error, %Changeset{}} = Containers.create_tag(@invalid_tag_attrs, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_tag/2 with valid data updates the tag", %{tag: tag, current_user: current_user} do
 | 
					    test "update_tag/3 with valid data updates the tag", %{tag: tag, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %Tag{} = tag} = Containers.update_tag(tag, @update_tag_attrs, current_user)
 | 
					      assert {:ok, %Tag{} = tag} = Containers.update_tag(tag, @update_tag_attrs, current_user)
 | 
				
			||||||
      assert tag.bg_color == "some updated bg-color"
 | 
					      assert tag.bg_color == "some updated bg-color"
 | 
				
			||||||
      assert tag.name == "some updated name"
 | 
					      assert tag.name == "some updated name"
 | 
				
			||||||
      assert tag.text_color == "some updated text-color"
 | 
					      assert tag.text_color == "some updated text-color"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "update_tag/2 with invalid data returns error changeset",
 | 
					    test "update_tag/3 with invalid data returns error changeset",
 | 
				
			||||||
         %{tag: tag, current_user: current_user} do
 | 
					         %{tag: tag, current_user: current_user} do
 | 
				
			||||||
      assert {:error, %Changeset{}} = Containers.update_tag(tag, @invalid_tag_attrs, current_user)
 | 
					      assert {:error, %Changeset{}} = Containers.update_tag(tag, @invalid_tag_attrs, current_user)
 | 
				
			||||||
      assert tag == Containers.get_tag!(tag.id, current_user)
 | 
					      assert tag == Containers.get_tag!(tag.id, current_user)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test "delete_tag/1 deletes the tag", %{tag: tag, current_user: current_user} do
 | 
					    test "delete_tag/2 deletes the tag", %{tag: tag, current_user: current_user} do
 | 
				
			||||||
      assert {:ok, %Tag{}} = Containers.delete_tag(tag, current_user)
 | 
					      assert {:ok, %Tag{}} = Containers.delete_tag(tag, current_user)
 | 
				
			||||||
      assert_raise Ecto.NoResultsError, fn -> Containers.get_tag!(tag.id, current_user) end
 | 
					      assert_raise Ecto.NoResultsError, fn -> Containers.get_tag!(tag.id, current_user) end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -309,12 +309,8 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
 | 
				
			|||||||
      assert html =~ dgettext("actions", "Show used")
 | 
					      assert html =~ dgettext("actions", "Show used")
 | 
				
			||||||
      refute html =~ gettext("$%{amount}", amount: display_currency(50.00))
 | 
					      refute html =~ gettext("$%{amount}", amount: display_currency(50.00))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      refute html =~
 | 
					      percentage = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
				
			||||||
               "\n" <>
 | 
					      refute html =~ "\n#{gettext("%{percentage}%", percentage: percentage)}\n"
 | 
				
			||||||
                 gettext("%{percentage}%",
 | 
					 | 
				
			||||||
                   percentage: ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					 | 
				
			||||||
                 ) <>
 | 
					 | 
				
			||||||
                 "\n"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      html =
 | 
					      html =
 | 
				
			||||||
        show_live
 | 
					        show_live
 | 
				
			||||||
@@ -323,12 +319,8 @@ defmodule CanneryWeb.AmmoGroupLiveTest do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      assert html =~ gettext("$%{amount}", amount: display_currency(50.00))
 | 
					      assert html =~ gettext("$%{amount}", amount: display_currency(50.00))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      assert html =~
 | 
					      percentage = ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
				
			||||||
               "\n" <>
 | 
					      assert html =~ "\n#{gettext("%{percentage}%", percentage: percentage)}\n"
 | 
				
			||||||
                 gettext("%{percentage}%",
 | 
					 | 
				
			||||||
                   percentage: ammo_group |> Ammo.get_percentage_remaining(current_user)
 | 
					 | 
				
			||||||
                 ) <>
 | 
					 | 
				
			||||||
                 "\n"
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user