forked from shibao/cannery
		
	add ammo count to ammo type index page
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| # v0.5.5 | ||||
| - Update translations | ||||
| - 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 | ||||
|  | ||||
| # v0.5.4 | ||||
|   | ||||
| @@ -231,6 +231,49 @@ defmodule Cannery.Ammo do | ||||
|     ) | ||||
|   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 """ | ||||
|   Returns the list of ammo_groups for a user. | ||||
|  | ||||
|   | ||||
| @@ -48,7 +48,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do | ||||
|  | ||||
|     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 core"), key: "bullet_core", type: :string}, | ||||
|         %{label: gettext("Cartridge"), key: "cartridge", type: :string}, | ||||
| @@ -84,6 +84,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do | ||||
|       end) | ||||
|       |> Kernel.++([ | ||||
|         %{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: 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), | ||||
|     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 | ||||
|     case ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) do | ||||
|       nil -> gettext("No cost information") | ||||
| @@ -115,6 +119,18 @@ defmodule CanneryWeb.AmmoTypeLive.Index do | ||||
|     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 | ||||
|     assigns = %{ammo_type: ammo_type} | ||||
|  | ||||
|   | ||||
| @@ -59,7 +59,7 @@ msgid "Ammo type" | ||||
| msgstr "Munitionsarten" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Average Price paid" | ||||
| 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/show.html.heex:37 | ||||
| #: 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 | ||||
| msgid "$%{amount}" | ||||
| msgstr "$%{amount}" | ||||
| @@ -732,7 +732,7 @@ msgid "Show %{name}" | ||||
| msgstr "Zeige %{name}" | ||||
|  | ||||
| #, 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 | ||||
| msgid "No cost information" | ||||
| msgstr "Keine Preisinformationen" | ||||
| @@ -935,3 +935,8 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.html.heex:28 | ||||
| msgid "Leave \"Uses left\" blank to make invite unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:87 | ||||
| msgid "Total # of ammo" | ||||
| msgstr "Summe aller Patronen" | ||||
|   | ||||
| @@ -188,7 +188,7 @@ msgstr "" | ||||
| "%{multiplier}" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery/ammo.ex:407 | ||||
| #: lib/cannery/ammo.ex:442 | ||||
| msgid "Invalid multiplier" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -293,7 +293,7 @@ msgstr[0] "Munitionsgruppe erfolgreich aktualisiert" | ||||
| msgstr[1] "Munitionsgruppe erfolgreich aktualisiert" | ||||
|  | ||||
| #, 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 | ||||
| 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?" | ||||
|   | ||||
| @@ -44,7 +44,7 @@ msgid "Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Average Price paid" | ||||
| msgstr "" | ||||
| @@ -603,7 +603,7 @@ msgstr "" | ||||
| #: 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: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 | ||||
| msgid "$%{amount}" | ||||
| msgstr "" | ||||
| @@ -715,7 +715,7 @@ msgid "Show %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "No cost information" | ||||
| msgstr "" | ||||
| @@ -918,3 +918,8 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.html.heex:28 | ||||
| msgid "Leave \"Uses left\" blank to make invite unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:87 | ||||
| msgid "Total # of ammo" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -45,7 +45,7 @@ msgid "Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Average Price paid" | ||||
| msgstr "" | ||||
| @@ -604,7 +604,7 @@ msgstr "" | ||||
| #: 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: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 | ||||
| msgid "$%{amount}" | ||||
| msgstr "" | ||||
| @@ -716,7 +716,7 @@ msgid "Show %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "No cost information" | ||||
| msgstr "" | ||||
| @@ -919,3 +919,8 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.html.heex:28 | ||||
| msgid "Leave \"Uses left\" blank to make invite unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:87 | ||||
| msgid "Total # of ammo" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -171,7 +171,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery/ammo.ex:407 | ||||
| #: lib/cannery/ammo.ex:442 | ||||
| msgid "Invalid multiplier" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -273,7 +273,7 @@ msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -170,7 +170,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery/ammo.ex:407 | ||||
| #: lib/cannery/ammo.ex:442 | ||||
| msgid "Invalid multiplier" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -59,7 +59,7 @@ msgid "Ammo type" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Average Price paid" | ||||
| msgstr "" | ||||
| @@ -618,7 +618,7 @@ msgstr "" | ||||
| #: 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: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 | ||||
| msgid "$%{amount}" | ||||
| msgstr "" | ||||
| @@ -730,7 +730,7 @@ msgid "Show %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "No cost information" | ||||
| msgstr "" | ||||
| @@ -933,3 +933,8 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.html.heex:28 | ||||
| msgid "Leave \"Uses left\" blank to make invite unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:87 | ||||
| msgid "Total # of ammo" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -186,7 +186,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery/ammo.ex:407 | ||||
| #: lib/cannery/ammo.ex:442 | ||||
| msgid "Invalid multiplier" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -292,7 +292,7 @@ msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -59,7 +59,7 @@ msgid "Ammo type" | ||||
| msgstr "Type de munition" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Average Price paid" | ||||
| 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/show.html.heex:37 | ||||
| #: 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 | ||||
| msgid "$%{amount}" | ||||
| msgstr "%{amount} $" | ||||
| @@ -734,7 +734,7 @@ msgid "Show %{name}" | ||||
| msgstr "Montrer %{name}" | ||||
|  | ||||
| #, 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 | ||||
| msgid "No cost information" | ||||
| msgstr "Aucune information de prix" | ||||
| @@ -937,3 +937,8 @@ msgstr "" | ||||
| #: lib/cannery_web/live/invite_live/form_component.html.heex:28 | ||||
| msgid "Leave \"Uses left\" blank to make invite unlimited" | ||||
| msgstr "" | ||||
|  | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:87 | ||||
| msgid "Total # of ammo" | ||||
| msgstr "Quantité de cartouches" | ||||
|   | ||||
| @@ -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}" | ||||
|  | ||||
| #, elixir-autogen, elixir-format | ||||
| #: lib/cannery/ammo.ex:407 | ||||
| #: lib/cannery/ammo.ex:442 | ||||
| msgid "Invalid multiplier" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -294,7 +294,7 @@ msgstr[0] "Groupe de munition mis à jour avec succès" | ||||
| msgstr[1] "Groupe de munition mis à jour avec succès" | ||||
|  | ||||
| #, 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 | ||||
| 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} ?" | ||||
|   | ||||
| @@ -272,7 +272,7 @@ msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, 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 | ||||
| msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" | ||||
| msgstr "" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user