Skip to content
This repository was archived by the owner on Feb 20, 2020. It is now read-only.

WIP: Move funds from archived members to group account #190

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
Merge with master and other changes in connection with that
  • Loading branch information
chime-mu committed Nov 29, 2017
commit 01e5c7d15a018e156f3797133ce0a4c1774b6460
6 changes: 1 addition & 5 deletions app/extras/cobudget_cleanup.rb
Original file line number Diff line number Diff line change
@@ -2,11 +2,7 @@ class CobudgetCleanup
def self.archived_members_with_funds!
if DateTime.now.utc.hour == 7
Group.find_each do |g|
l = g.find_archived_members_with_funds()
if l.length > 0
group_user = g.ensure_group_user_exist()
g.transfer_memberships_to_group_account(l, group_user)
end
g.cleanup_archived_members_with_funds(user)
end
end
end
55 changes: 22 additions & 33 deletions app/models/group.rb
Original file line number Diff line number Diff line change
@@ -47,35 +47,6 @@ def extend_trial
self.save
end

def ensure_group_user_exist()
uid = %(group-#{id}@non-existing.email)
group_user = User.find_by uid: uid
if !group_user
group_user = User.create!({
name: %(Group "#{name}"),
uid: uid,
email: uid,
password: "**NOLOGIN**",
reset_password_token: %(group-user-not-a-token-group-#{id}),
confirmation_token: nil,
confirmed_at: DateTime.now.utc()
})
end
group_user
end

def ensure_group_account_exist()
group_user = ensure_group_user_exist()
group_membership = Membership.find_by group_id: id, member_id: group_user.id
if !group_membership
group_membership = Membership.create!({
group_id: id,
member_id: group_user.id
})
end
group_membership
end

def find_archived_members_with_funds()
l = []
Membership.where(group_id: id).where.not(archived_at: nil).find_each do |membership|
@@ -91,16 +62,32 @@ def find_archived_members_with_funds()
l
end

def transfer_balance_from_member_to_group_account(member_id, current_user)
m = Membership.find(member_id)
amount = m.raw_balance
ActiveRecord::Base.transaction do
a = Allocation.create(user_id: member_id, group_id: id, amount: -amount)
Transaction.create!({
datetime: a.created_at,
from_account_id: m.status_account_id,
to_account_id: status_account_id,
user_id: current_user.id,
amount: amount
})
end
end

def transfer_memberships_to_group_account(transfer_from_list, current_user)
group_membership = ensure_group_account_exist
transfer_from_list.each do |e|
Membership.find(e[:membership_id]).transfer_funds_to_membership(group_membership, current_user)
end
transfer_balance_from_member_to_group_account(e[:membership_id], current_user)
end

mail_admins_about_members(transfer_from_list)
end

def for_each_admin
Membership.where(group_id: id, is_admin: :true).find_each do |admin|
Membership.where(group_id: id, is_admin: :true, archived_at: nil).find_each do |admin|
yield admin
end
end
@@ -124,7 +111,9 @@ def mail_admins_about_members(memberlist)

def cleanup_archived_members_with_funds(current_user)
l = find_archived_members_with_funds()
transfer_memberships_to_group_account(l, current_user)
if l.length > 0
transfer_memberships_to_group_account(l, current_user)
end
end

def add_member(user)
17 changes: 0 additions & 17 deletions app/models/membership.rb
Original file line number Diff line number Diff line change
@@ -78,23 +78,6 @@ def transactions_data_ok?
(balance_on_status_account == raw_balance) && (balance_on_incoming_account + total_allocations == 0)
end

# This function will transfer all funds to a different membership
def transfer_funds_to_membership(receiver, current_user)
amount = raw_balance
ActiveRecord::Base.transaction do
a = Allocation.create(user_id: member_id, group_id: group_id, amount: -amount)
Allocation.create(user_id: receiver.member_id, group_id: receiver.group_id, amount: amount,
created_at: a.created_at, updated_at: a.updated_at)
Transaction.create!({
datetime: a.created_at,
from_account_id: status_account_id,
to_account_id: receiver.status_account_id,
user_id: current_user.id,
amount: amount
})
end
end

private
def currency_code
group.currency_code
Original file line number Diff line number Diff line change
@@ -6,8 +6,7 @@
<p>
A previous member (<%= @archived_member.name %>, <%= @archived_member.email %>) funded this bucket with
<%= @formatted_amount %>. As this person is no longer a member of the group, the funds
has been returned to the group account <%= @group_account.name %> which you will
find in the list of funders.
have been returned to the group account <%= @group_account.name %>.
</p>

<p><%= link_to 'view', "#{root_url}#/buckets/#{@bucket.id}" %></p>
You are viewing a condensed version of this merge commit. You can view the full changes here.