add ammo type round totals and total rounds shot
This commit is contained in:
		| @@ -6,6 +6,7 @@ | |||||||
| - Fix ammo type firing type display | - Fix ammo type firing type display | ||||||
| - Show original count, current value, and percentage remaining for ammo groups | - Show original count, current value, and percentage remaining for ammo groups | ||||||
| - Show shot history for an ammo group | - Show shot history for an ammo group | ||||||
|  | - Show ammo round totals and total shot for ammo types | ||||||
|  |  | ||||||
| # 0.1.0 | # 0.1.0 | ||||||
| - Initial release! | - Initial release! | ||||||
|   | |||||||
| @@ -67,6 +67,59 @@ defmodule Cannery.Ammo do | |||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Gets the total number of rounds for an ammo type | ||||||
|  |  | ||||||
|  |   Raises `Ecto.NoResultsError` if the Ammo type does not exist. | ||||||
|  |  | ||||||
|  |   ## Examples | ||||||
|  |  | ||||||
|  |       iex> get_round_count_for_ammo_type(123, %User{id: 123}) | ||||||
|  |       %AmmoType{} | ||||||
|  |  | ||||||
|  |       iex> get_round_count_for_ammo_type(456, %User{id: 123}) | ||||||
|  |       ** (Ecto.NoResultsError) | ||||||
|  |  | ||||||
|  |   """ | ||||||
|  |   @spec get_round_count_for_ammo_type(AmmoType.t(), User.t()) :: non_neg_integer() | ||||||
|  |   def get_round_count_for_ammo_type( | ||||||
|  |         %AmmoType{id: ammo_type_id, user_id: user_id}, | ||||||
|  |         %User{id: user_id} | ||||||
|  |       ) do | ||||||
|  |     Repo.one!( | ||||||
|  |       from ag in AmmoGroup, | ||||||
|  |         where: ag.ammo_type_id == ^ammo_type_id, | ||||||
|  |         select: sum(ag.count) | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Gets the total number of rounds shot for an ammo type | ||||||
|  |  | ||||||
|  |   Raises `Ecto.NoResultsError` if the Ammo type does not exist. | ||||||
|  |  | ||||||
|  |   ## Examples | ||||||
|  |  | ||||||
|  |       iex> get_used_count_for_ammo_type(123, %User{id: 123}) | ||||||
|  |       %AmmoType{} | ||||||
|  |  | ||||||
|  |       iex> get_used_count_for_ammo_type(456, %User{id: 123}) | ||||||
|  |       ** (Ecto.NoResultsError) | ||||||
|  |  | ||||||
|  |   """ | ||||||
|  |   @spec get_used_count_for_ammo_type(AmmoType.t(), User.t()) :: non_neg_integer() | ||||||
|  |   def get_used_count_for_ammo_type( | ||||||
|  |         %AmmoType{id: ammo_type_id, user_id: user_id}, | ||||||
|  |         %User{id: user_id} | ||||||
|  |       ) do | ||||||
|  |     Repo.one!( | ||||||
|  |       from ag in AmmoGroup, | ||||||
|  |         left_join: sg in assoc(ag, :shot_groups), | ||||||
|  |         where: ag.ammo_type_id == ^ammo_type_id, | ||||||
|  |         select: sum(sg.count) | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   @doc """ |   @doc """ | ||||||
|   Creates a ammo_type. |   Creates a ammo_type. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -28,6 +28,9 @@ | |||||||
|                 <%= field_name %> |                 <%= field_name %> | ||||||
|               </th> |               </th> | ||||||
|             <% end %> |             <% end %> | ||||||
|  |             <th class="p-2"> | ||||||
|  |               <%= gettext("Total # of rounds") %> | ||||||
|  |             </th> | ||||||
|  |  | ||||||
|             <th class="p-2"></th> |             <th class="p-2"></th> | ||||||
|           </tr> |           </tr> | ||||||
| @@ -46,6 +49,10 @@ | |||||||
|                 </td> |                 </td> | ||||||
|               <% end %> |               <% end %> | ||||||
|  |  | ||||||
|  |               <td class="p-2"> | ||||||
|  |                 <%= ammo_type |> Ammo.get_round_count_for_ammo_type(@current_user) %> | ||||||
|  |               </td> | ||||||
|  |  | ||||||
|               <td class="p-2"> |               <td class="p-2"> | ||||||
|                 <div class="px-4 py-2 space-x-4 flex justify-center items-center"> |                 <div class="px-4 py-2 space-x-4 flex justify-center items-center"> | ||||||
|                   <%= live_redirect to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type), |                   <%= live_redirect to: Routes.ammo_type_show_path(Endpoint, :show, ammo_type), | ||||||
|   | |||||||
| @@ -73,6 +73,22 @@ | |||||||
|       <% end %> |       <% end %> | ||||||
|     <% end %> |     <% end %> | ||||||
|  |  | ||||||
|  |     <h3 class="title text-lg"> | ||||||
|  |       <%= gettext("Current # of rounds:") %> | ||||||
|  |     </h3> | ||||||
|  |  | ||||||
|  |     <span class="text-primary-600"> | ||||||
|  |       <%= @ammo_type |> Ammo.get_round_count_for_ammo_type(@current_user) %> | ||||||
|  |     </span> | ||||||
|  |  | ||||||
|  |     <h3 class="title text-lg"> | ||||||
|  |       <%= gettext("Total rounds shot:") %> | ||||||
|  |     </h3> | ||||||
|  |  | ||||||
|  |     <span class="text-primary-600"> | ||||||
|  |       <%= @ammo_type |> Ammo.get_used_count_for_ammo_type(@current_user) %> | ||||||
|  |     </span> | ||||||
|  |  | ||||||
|     <%= if @avg_cost_per_round do %> |     <%= if @avg_cost_per_round do %> | ||||||
|       <h3 class="title text-lg"> |       <h3 class="title text-lg"> | ||||||
|         <%= gettext("Average Price paid") %>: |         <%= gettext("Average Price paid") %>: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user