8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'app/services/report/balance_sheet/balance_sheet.rb', line 8
def self.result_report(options = {})
trial_balance = []; by_month = [];
data = balance_data(options[:years][0].to_i,options[:months][0].to_i,options[:company_ids][0].to_i)
accounts = data.map{ |r| {id: r[:account_id],number: r[:account_number],name: r[:account_name]} }.uniq.sort_by{ |e| e[:number] }
accounts.each do |acc|
debit = 0; credit = 0; ytd_debit = 0; ytd_credit = 0
data.each do |r|
if r[:account_number] == acc[:number]
acc[:number] == 4980 ? debit = r[:debit]: debit += r[:debit]
acc[:number] == 4980 ? credit = r[:credit] : credit += r[:credit]
ytd_debit += r[:ytd_debit]
ytd_credit += r[:ytd_credit]
end
end
debit -= ytd_credit if acc[:number] == 4999
credit -= ytd_debit if acc[:number] == 4999
trial_balance << {id: acc[:id], number: acc[:number], name: acc[:name], acc_debit: debit, acc_credit: credit, ytd_debit: ytd_debit, ytd_credit: ytd_credit}
end trial_balance.delete_if{ |d| d[:acc_debit].zero? && d[:acc_credit].zero? && d[:ytd_debit].zero? && d[:ytd_credit] == 0}
accounts.each do |acc|
ytd_value = 0
data.each do |r|
if r[:account_number] == acc[:number]
ytd_value += (r[:ytd_debit] + r[:ytd_credit])
end
end
by_month << { id: acc[:id], number: acc[:number], name: acc[:name], ytd_value: ytd_value }
(1..12).each do |e|
value = 0
data.each do |r|
if r[:account_number] == acc[:number] && r[:month] <= e
acc[:number] == 4980 ? value = (r[:debit] + r[:credit]) : value += (r[:debit] + r[:credit])
end
end
by_month.map{ |r| r[:number] == acc[:number] ? r[e] = (value + r[:ytd_value]) : r }
by_month.map{ |r| r[:number] == acc[:number] ? r[e] = value : r } if acc[:number] == 4999
end
end
if options[:months][0].to_i < 12
((options[:months][0].to_i + 1)..12).each do |v|
by_month.map{ |r| r[v] = 0 }
end
end
by_month.delete_if{ |d| d[:ytd_value].zero? && d[1].zero? && d[2].zero? && d[3].zero? && d[4].zero? && d[5].zero? && d[6].zero? && d[7].zero? && d[8].zero? && d[9].zero? && d[10].zero? && d[11].zero? && d[12].zero? }
Result.new(success: true, year: options[:years][0].to_i, month: options[:months][0].to_i, company_id: options[:company_ids][0].to_i, trial_balance: trial_balance, by_month: by_month)
end
|