show average cost per round for ammo types
This commit is contained in:
parent
ad25164c16
commit
c8945607ea
@ -37,6 +37,30 @@ defmodule Cannery.Ammo do
|
||||
@spec get_ammo_type!(AmmoType.id()) :: AmmoType.t()
|
||||
def get_ammo_type!(id), do: Repo.get!(AmmoType, id)
|
||||
|
||||
@doc """
|
||||
Gets the average cost of a single ammo type
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Ammo type does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_ammo_type!(123)
|
||||
%AmmoType{}
|
||||
|
||||
iex> get_ammo_type!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
@spec get_average_cost_for_ammo_type!(AmmoType.t()) :: float()
|
||||
def get_average_cost_for_ammo_type!(%{id: ammo_type_id}) do
|
||||
Repo.one!(
|
||||
from ag in AmmoGroup,
|
||||
where: ag.ammo_type_id == ^ammo_type_id,
|
||||
where: not (ag.price_paid |> is_nil()),
|
||||
select: sum(ag.price_paid) / sum(ag.count)
|
||||
)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a ammo_type.
|
||||
|
||||
|
@ -14,11 +14,14 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
|
||||
|
||||
@impl true
|
||||
def handle_params(%{"id" => id}, _, socket) do
|
||||
ammo_type = Ammo.get_ammo_type!(id) |> Repo.preload(:ammo_groups)
|
||||
|
||||
socket =
|
||||
socket
|
||||
|> assign(
|
||||
page_title: page_title(socket.assigns.live_action),
|
||||
ammo_type: Ammo.get_ammo_type!(id) |> Repo.preload(:ammo_groups)
|
||||
ammo_type: ammo_type,
|
||||
avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type!()
|
||||
)
|
||||
|
||||
{:noreply, socket}
|
||||
|
@ -40,7 +40,7 @@
|
||||
] do %>
|
||||
<%= if @ammo_type |> Map.get(field) do %>
|
||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||
<%= field |> humanize() %> :
|
||||
<%= field |> humanize() %>:
|
||||
</h3>
|
||||
|
||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||
@ -57,7 +57,7 @@
|
||||
:corrosive
|
||||
] do %>
|
||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||
<%= field |> humanize() %> :
|
||||
<%= field |> humanize() %>:
|
||||
</h3>
|
||||
|
||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||
@ -68,7 +68,7 @@
|
||||
<%= for field <- [:manufacturer, :sku] do %>
|
||||
<%= if @ammo_type |> Map.get(field) do %>
|
||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||
<%= field |> humanize() %> :
|
||||
<%= field |> humanize() %>:
|
||||
</h3>
|
||||
|
||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||
@ -76,6 +76,16 @@
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= if @avg_cost_per_round do %>
|
||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||
Average Price paid:
|
||||
</h3>
|
||||
|
||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||
<%= @avg_cost_per_round |> :erlang.float_to_binary(decimals: 2) %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr class="hr">
|
||||
|
Loading…
Reference in New Issue
Block a user