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
59
60
61
62
63
64
65
|
# File 'app/services/report/profit_loss/profit_loss.rb', line 8
def self.result_report(options = {})
trial_pl = []; consolidated = []; by_month = [];
data = profit_and_loss_data(options[:years][0].to_i,options[:months][0].to_i,options[:company_ids][0].to_i,0)
data_trial = profit_and_loss_data(options[:years][0].to_i,options[:months][0].to_i,options[:company_ids][0].to_i,1)
accounts = data_trial.map{ |r| {id: r[:account_id],number: r[:account_number],name: r[:account_name]} }.uniq.sort_by{ |e| e[:number] }
accounts.each do |acc|
bb_debit = 0; bb_credit = 0; debit = 0; credit = 0;
data_trial.each do |r|
if r[:account_number] == acc[:number]
bb_debit += r[:value] if r[:year] == (options[:years][0].to_i - 1) && r[:value] < 0
bb_credit += r[:value] if r[:year] == (options[:years][0].to_i - 1) && r[:value] > 0
debit += r[:value] if r[:year] == options[:years][0].to_i && r[:month] <= options[:months][0].to_i && r[:value] < 0
credit += r[:value] if r[:year] == options[:years][0].to_i && r[:month] <= options[:months][0].to_i && r[:value] > 0
end
end
trial_pl << {id: acc[:id], number: acc[:number], name: acc[:name], bb_debit: bb_debit, bb_credit: bb_credit, debit: debit, credit: credit}
end
accounts.each do |acc|
c_month = 0; p_month = 0; c_year = 0; p_year = 0
data.each do |r|
if r[:account_number] == acc[:number]
c_month += r[:value] if r[:year] == options[:years][0].to_i && r[:month] == options[:months][0].to_i
p_month += r[:value] if r[:year] == (options[:years][0].to_i - 1) && r[:month] == options[:months][0].to_i
c_year += r[:value] if r[:year] == options[:years][0].to_i && r[:month] <= options[:months][0].to_i
p_year += r[:value] if r[:year] == (options[:years][0].to_i - 1) && r[:month] <= options[:months][0].to_i
end
end
consolidated << {id: acc[:id], number: acc[:number], name: acc[:name], c_month: c_month, p_month: p_month, c_year: c_year, p_year: p_year}
end
accounts.each do |acc|
acum = 0
data.each do |r|
if r[:account_number] == acc[:number] && r[:year] == options[:years][0].to_i && r[:month] <= options[:months][0].to_i
acum += r[:value]
end
end
by_month << { id: acc[:id], number: acc[:number], name: acc[:name], acum: acum }
(1..12).each do |e|
monthly = 0
data.each do |r|
if r[:account_number] == acc[:number] && r[:year] == options[:years][0].to_i && r[:month] == e
monthly += r[:value]
end
end
by_month.map{ |r| r[:number] == acc[:number] ? r[e] = monthly : r }
end
end
trial_pl.delete_if{ |c| c[:bb_debit].zero? && c[:bb_credit].zero? && c[:debit].zero? && c[:credit].zero? }
consolidated.delete_if{ |c| c[:c_month].zero? && c[:p_month].zero? && c[:c_year].zero? && c[:p_year].zero? }
by_month.delete_if{ |b| b[:acum].zero? && b[1].zero? && b[2].zero? && b[3].zero? && b[4].zero? && b[5].zero? && b[6].zero? && b[7].zero? && b[8].zero? && b[9].zero? && b[10].zero? && b[11].zero? && b[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_pl: trial_pl, profit_loss_data: consolidated, by_month: by_month)
end
|