add ammo count to ammo type index page

This commit is contained in:
shibao 2022-11-06 20:35:12 -05:00
parent 44fbd69e0f
commit dc355fcd8e
18 changed files with 111 additions and 26 deletions

View File

@ -1,6 +1,7 @@
# v0.5.5 # v0.5.5
- Update translations - Update translations
- Make ammo index page a bit more compact - Make ammo index page a bit more compact
- Add ammo count to ammo type index page
- Forgot to add the logo as the favicon whoops - Forgot to add the logo as the favicon whoops
# v0.5.4 # v0.5.4

View File

@ -231,6 +231,49 @@ defmodule Cannery.Ammo do
) )
end end
@doc """
Returns the count of ammo_groups for an ammo type.
## Examples
iex> get_ammo_groups_count_for_type(%User{id: 123})
3
"""
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()]
@spec get_ammo_groups_count_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) ::
[AmmoGroup.t()]
def get_ammo_groups_count_for_type(ammo_type, user, include_empty \\ false)
def get_ammo_groups_count_for_type(
%AmmoType{id: ammo_type_id, user_id: user_id},
%User{id: user_id},
_include_empty = true
) do
Repo.one!(
from ag in AmmoGroup,
where: ag.user_id == ^user_id,
where: ag.ammo_type_id == ^ammo_type_id,
distinct: true,
select: count(ag.id)
) || 0
end
def get_ammo_groups_count_for_type(
%AmmoType{id: ammo_type_id, user_id: user_id},
%User{id: user_id},
_include_empty = false
) do
Repo.one!(
from ag in AmmoGroup,
where: ag.user_id == ^user_id,
where: ag.ammo_type_id == ^ammo_type_id,
where: not (ag.count == 0),
distinct: true,
select: count(ag.id)
) || 0
end
@doc """ @doc """
Returns the list of ammo_groups for a user. Returns the list of ammo_groups for a user.

View File

@ -48,7 +48,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
columns = columns =
[ [
%{label: gettext("Name"), key: "name", type: :string}, %{label: gettext("Name"), key: "name", type: :name},
%{label: gettext("Bullet type"), key: "bullet_type", type: :string}, %{label: gettext("Bullet type"), key: "bullet_type", type: :string},
%{label: gettext("Bullet core"), key: "bullet_core", type: :string}, %{label: gettext("Bullet core"), key: "bullet_core", type: :string},
%{label: gettext("Cartridge"), key: "cartridge", type: :string}, %{label: gettext("Cartridge"), key: "cartridge", type: :string},
@ -84,6 +84,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
end) end)
|> Kernel.++([ |> Kernel.++([
%{label: gettext("Total # of rounds"), key: "round_count", type: :round_count}, %{label: gettext("Total # of rounds"), key: "round_count", type: :round_count},
%{label: gettext("Total # of ammo"), key: "ammo_count", type: :ammo_count},
%{label: gettext("Average Price paid"), key: "avg_price_paid", type: :avg_price_paid}, %{label: gettext("Average Price paid"), key: "avg_price_paid", type: :avg_price_paid},
%{label: nil, key: "actions", type: :actions, sortable: false} %{label: nil, key: "actions", type: :actions, sortable: false}
]) ])
@ -108,6 +109,9 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
defp get_ammo_type_value(:round_count, _key, ammo_type, current_user), defp get_ammo_type_value(:round_count, _key, ammo_type, current_user),
do: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user) do: ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
defp get_ammo_type_value(:ammo_count, _key, ammo_type, current_user),
do: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user)
defp get_ammo_type_value(:avg_price_paid, _key, ammo_type, current_user) do defp get_ammo_type_value(:avg_price_paid, _key, ammo_type, current_user) do
case ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) do case ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) do
nil -> gettext("No cost information") nil -> gettext("No cost information")
@ -115,6 +119,18 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
end end
end end
defp get_ammo_type_value(:name, _key, ammo_type, _current_user) do
assigns = %{ammo_type: ammo_type}
~H"""
<%= live_redirect to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type),
class: "link",
data: [qa: "view-name-#{ammo_type.id}"] do %>
<%= ammo_type.name %>
<% end %>
"""
end
defp get_ammo_type_value(:actions, _key, ammo_type, _current_user) do defp get_ammo_type_value(:actions, _key, ammo_type, _current_user) do
assigns = %{ammo_type: ammo_type} assigns = %{ammo_type: ammo_type}

View File

@ -59,7 +59,7 @@ msgid "Ammo type"
msgstr "Munitionsarten" msgstr "Munitionsarten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:88
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "Durchschnittlicher Kaufpreis" msgstr "Durchschnittlicher Kaufpreis"
@ -620,7 +620,7 @@ msgstr "Schießkladde"
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:118
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "$%{amount}" msgstr "$%{amount}"
@ -732,7 +732,7 @@ msgid "Show %{name}"
msgstr "Zeige %{name}" msgstr "Zeige %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:117
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "Keine Preisinformationen" msgstr "Keine Preisinformationen"
@ -935,3 +935,8 @@ msgstr ""
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:87
msgid "Total # of ammo"
msgstr "Summe aller Patronen"

View File

@ -188,7 +188,7 @@ msgstr ""
"%{multiplier}" "%{multiplier}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407 #: lib/cannery/ammo.ex:442
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -293,7 +293,7 @@ msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert" msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140 #: lib/cannery_web/live/ammo_type_live/index.ex:156
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"

View File

@ -44,7 +44,7 @@ msgid "Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:88
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "" msgstr ""
@ -603,7 +603,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:118
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
@ -715,7 +715,7 @@ msgid "Show %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:117
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -918,3 +918,8 @@ msgstr ""
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87
msgid "Total # of ammo"
msgstr ""

View File

@ -45,7 +45,7 @@ msgid "Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:88
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "" msgstr ""
@ -604,7 +604,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:118
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
@ -716,7 +716,7 @@ msgid "Show %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:117
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -919,3 +919,8 @@ msgstr ""
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:87
msgid "Total # of ammo"
msgstr ""

View File

@ -171,7 +171,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407 #: lib/cannery/ammo.ex:442
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -273,7 +273,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140 #: lib/cannery_web/live/ammo_type_live/index.ex:156
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""

View File

@ -170,7 +170,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407 #: lib/cannery/ammo.ex:442
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -59,7 +59,7 @@ msgid "Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:88
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "" msgstr ""
@ -618,7 +618,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:118
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
@ -730,7 +730,7 @@ msgid "Show %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:117
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "" msgstr ""
@ -933,3 +933,8 @@ msgstr ""
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:87
msgid "Total # of ammo"
msgstr ""

View File

@ -186,7 +186,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407 #: lib/cannery/ammo.ex:442
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -292,7 +292,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140 #: lib/cannery_web/live/ammo_type_live/index.ex:156
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""

View File

@ -59,7 +59,7 @@ msgid "Ammo type"
msgstr "Type de munition" msgstr "Type de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:87 #: lib/cannery_web/live/ammo_type_live/index.ex:88
#: lib/cannery_web/live/ammo_type_live/show.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:100
msgid "Average Price paid" msgid "Average Price paid"
msgstr "Prix acheté moyen" msgstr "Prix acheté moyen"
@ -622,7 +622,7 @@ msgstr "Évènements de tir"
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:125
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:118
#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #: lib/cannery_web/live/ammo_type_live/show.html.heex:104
msgid "$%{amount}" msgid "$%{amount}"
msgstr "%{amount}$" msgstr "%{amount}$"
@ -734,7 +734,7 @@ msgid "Show %{name}"
msgstr "Montrer %{name}" msgstr "Montrer %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:113 #: lib/cannery_web/live/ammo_type_live/index.ex:117
#: lib/cannery_web/live/ammo_type_live/show.html.heex:110 #: lib/cannery_web/live/ammo_type_live/show.html.heex:110
msgid "No cost information" msgid "No cost information"
msgstr "Aucune information de prix" msgstr "Aucune information de prix"
@ -937,3 +937,8 @@ msgstr ""
#: lib/cannery_web/live/invite_live/form_component.html.heex:28 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited" msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:87
msgid "Total # of ammo"
msgstr "Quantité de cartouches"

View File

@ -187,7 +187,7 @@ 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}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407 #: lib/cannery/ammo.ex:442
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -294,7 +294,7 @@ msgstr[0] "Groupe de munition mis à jour avec succès"
msgstr[1] "Groupe de munition mis à jour avec succès" msgstr[1] "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140 #: lib/cannery_web/live/ammo_type_live/index.ex:156
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Êtes-vous certain·e de supprimer %{name}?" msgstr "Êtes-vous certain·e de supprimer %{name}?"

View File

@ -272,7 +272,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:140 #: lib/cannery_web/live/ammo_type_live/index.ex:156
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27 #: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "" msgstr ""