forked from shibao/cannery
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()
|
@spec get_ammo_type!(AmmoType.id()) :: AmmoType.t()
|
||||||
def get_ammo_type!(id), do: Repo.get!(AmmoType, id)
|
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 """
|
@doc """
|
||||||
Creates a ammo_type.
|
Creates a ammo_type.
|
||||||
|
|
||||||
|
@ -14,11 +14,14 @@ defmodule CanneryWeb.AmmoTypeLive.Show do
|
|||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_params(%{"id" => id}, _, socket) do
|
def handle_params(%{"id" => id}, _, socket) do
|
||||||
|
ammo_type = Ammo.get_ammo_type!(id) |> Repo.preload(:ammo_groups)
|
||||||
|
|
||||||
socket =
|
socket =
|
||||||
socket
|
socket
|
||||||
|> assign(
|
|> assign(
|
||||||
page_title: page_title(socket.assigns.live_action),
|
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}
|
{:noreply, socket}
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
] do %>
|
] do %>
|
||||||
<%= if @ammo_type |> Map.get(field) do %>
|
<%= if @ammo_type |> Map.get(field) do %>
|
||||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||||
<%= field |> humanize() %> :
|
<%= field |> humanize() %>:
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||||
@ -57,7 +57,7 @@
|
|||||||
:corrosive
|
:corrosive
|
||||||
] do %>
|
] do %>
|
||||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||||
<%= field |> humanize() %> :
|
<%= field |> humanize() %>:
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||||
@ -68,7 +68,7 @@
|
|||||||
<%= for field <- [:manufacturer, :sku] do %>
|
<%= for field <- [:manufacturer, :sku] do %>
|
||||||
<%= if @ammo_type |> Map.get(field) do %>
|
<%= if @ammo_type |> Map.get(field) do %>
|
||||||
<h3 class="mb-2 sm:mr-4 title text-lg">
|
<h3 class="mb-2 sm:mr-4 title text-lg">
|
||||||
<%= field |> humanize() %> :
|
<%= field |> humanize() %>:
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<span class="mb-4 sm:mb-2 text-primary-600">
|
<span class="mb-4 sm:mb-2 text-primary-600">
|
||||||
@ -76,6 +76,16 @@
|
|||||||
</span>
|
</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% 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>
|
</div>
|
||||||
|
|
||||||
<hr class="hr">
|
<hr class="hr">
|
||||||
|
Loading…
Reference in New Issue
Block a user