Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add: Expense show view
  • Loading branch information
mikurikuri11 committed Jul 5, 2023
commit 5e3c37d06cf812b5ca0339479bb20fbbb261dec7
31 changes: 31 additions & 0 deletions app/controllers/expenses_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
class ExpensesController < ApplicationController
def show
@group = Group.find(params[:group_id])
@users = @group.users
@difference = Expense.new.split_expenses(@users)
end

def edit
@group = Group.find(params[:group_id])
@users = @group.users
end

def update
@group = Group.find(params[:group_id])
@users = @group.users

@users.each do |user|
expense = user.expense
amount = params["group_user_#{user.id}_expenses"].to_i
expense.update(amount: amount) if expense
end

redirect_to expense_path(@group)
end

private

def expense_params
params.require(:expense).permit(:amount, :group_id, :user_id)
end
end
14 changes: 14 additions & 0 deletions app/models/expense.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
class Expense < ApplicationRecord
belongs_to :user
belongs_to :group

def split_expenses(users)
total_amount = users.sum { |user| user.expense&.amount.to_i }
num_users = users.size
per_person_amount = total_amount / num_users

differences = users.map do |user|
paid_amount = user.expense&.amount.to_i
difference = per_person_amount - paid_amount
{ user: user, difference: difference }
end

return differences
end
end
3 changes: 1 addition & 2 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ class User < ApplicationRecord
end
has_many :group_members, dependent: :destroy
has_many :groups, through: :group_members

has_many :expenses, dependent: :destroy
has_one :expense, dependent: :destroy
end
30 changes: 30 additions & 0 deletions app/views/expenses/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<div class="mb-6 text-center">
<span class="text-3xl font-bold">
Edit Amount
</span>
</div>

<div class='flex flex-wrap justify-center'>
<%= form_with model: @group, url: group_expenses_path(@group), local: true, class: "xl:w-8/12 md:w-10/12", data: { turbo: false }, readonly: true do |f| %>
<%= render "user/shared/error_messages", resource: @group %>
<div class="mb-6">
<%= label_tag :name, "Name", class: "mb-2 block text-sm text-gray-600" %>
<span class="text-gray-600">
<%= @group.name %>
</span>
</div>

<div class="mb-6">
<%= label_tag :user_lists, "Member", class: "mb-2 block text-sm text-gray-600" %>
<span class="text-gray-600">
<% @users.each do |user| %>
<%= user.name %>
<%= f.text_field :expenses, name: "group_user_#{user.id}_expenses", value: user.expense&.amount.to_i, class: "block w-full mt-1 rounded-md shadow-sm border-gray-300 focus:border-indigo-500 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" %>
円 <br>
<% end %>
</span>
</div>

<%= link_to "Update", group_expenses_path(@group), class: "inline-flex w-full items-center justify-center rounded-md bg-indigo-500 p-3 text-white duration-100 ease-in-out hover:bg-indigo-600 focus:outline-none cursor-pointer", method: :put %>
<% end %>
</div>
42 changes: 42 additions & 0 deletions app/views/expenses/show.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<div class="mb-6 text-center">
<span class="text-3xl font-bold">
Show Amount
</span>
</div>

<div class='flex flex-wrap justify-center'>
<%= form_with model: @group, url: group_path(@group), local: true, class: "xl:w-8/12 md:w-10/12", data: { turbo: false }, readonly: true do |f| %>
<%= render "user/shared/error_messages", resource: @group %>
<div class="mb-6">
<%= label_tag :name, "Name", class: "mb-2 block text-sm text-gray-600" %>
<span class="text-gray-600">
<%= @group.name %>
</span>
</div>

<div class="mb-6">
<%= label_tag :user_lists, "Member", class: "mb-2 block text-sm text-gray-600" %>
<span class="text-gray-600">
<% @users.each do |user| %>
<%= user.name %>
<% if user.expense %>
<%= user.expense.amount %> 円 <br>
<% else %>
0 円 <br>
<% end %>
<% end %>
</span>
</div>

<div class="mb-6">
<%= label_tag :differences, "differences", class: "mb-2 block text-sm text-gray-600" %>
<ul>
<% @difference.each do |hash| %>
<li><%= hash[:user].name %> : <%= hash[:difference] %> 円</li>
<% end %>
</ul>
</div>

<%= link_to "Edit", edit_group_expenses_path(@group), class: "inline-flex w-full items-center justify-center rounded-md bg-indigo-500 p-3 text-white duration-100 ease-in-out hover:bg-indigo-600 focus:outline-none cursor-pointer" %>
<% end %>
</div>
4 changes: 3 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
registrations: 'user/registrations'
}
root to: 'pages#home'
resources :groups, only: %i[index new create show edit update]
resources :groups, only: %i[index new create show edit update] do
resource :expenses, only: %i[show edit update]
end

get '/up/', to: 'up#index', as: :up
get '/up/databases', to: 'up#databases', as: :up_databases
Expand Down