class PayrolleeCz::PayrollProcess

Attributes

concepts[R]
period[R]
tags[R]

Public Class Methods

new(tag_gate, concept_gate, period) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 10
def initialize(tag_gate, concept_gate, period)
  @tags = tag_gate
  @concepts = concept_gate

  @period = period
  @terms = Hash.new
  @results = Hash.new
end

Public Instance Methods

add_term(term_refer, term_values) click to toggle source

add a new term

# File lib/payrollee_cz/core/payroll_process.rb, line 39
def add_term(term_refer, term_values)
  period_base = PayrollPeriod::NOW
  add_term_to_hash(@terms, period_base, term_refer, term_values)
end
add_term_to_hash(term_hash, period_base, term_refer, term_values) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 44
def add_term_to_hash(term_hash, period_base, term_refer, term_values)
  term_to_add = new_term_pair(term_hash, period_base, term_refer, term_values)
  term_hash.merge!(term_to_add)
  term_to_add.keys[0]
end
concept_for(code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 162
def concept_for(code)
  empty_values = {}
  concept = concepts.concept_for(code.concept_code, code.concept_name, empty_values)
end
create_calculation_steps(term_hash, period_base, pending_codes) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 167
def create_calculation_steps(term_hash, period_base, pending_codes)
  empty_value = {}
  calculation_steps = pending_codes.inject (term_hash.deep_dup) do |agr,code|
    merge_term_to_hash(agr, period_base, code, empty_value)
  end
  calculation_steps
end
evaluate(pay_tag) click to toggle source

evaluate and return result from Results by key of tag

# File lib/payrollee_cz/core/payroll_process.rb, line 76
def evaluate(pay_tag)
  period_base = PayrollPeriod::NOW

  pending_uniq_codes = concepts.collect_pending_codes_for(@terms)

  calculation_steps = create_calculation_steps(@terms, period_base, pending_uniq_codes)

  sorted_calculation = calculation_steps.sort {|a,b| a.last<=>b.last}

  @results = sorted_calculation.inject({}) do |agr, x|
    agr.merge!({x.first => x.last.evaluate(period, tags, agr)})
  end

  get_result(pay_tag)
end
find_concept(concept_code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 23
def find_concept(concept_code)
  concepts.find_concept(concept_code)
end
find_tag(tag_code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 19
def find_tag(tag_code)
  tags.find_tag(tag_code)
end
get_first_order_from(orders_sorted) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 157
def get_first_order_from(orders_sorted)
  first_code_order = 1
  first_code_order = orders_sorted.first unless orders_sorted.first.nil?
end
get_new_order_from(orders_sorted) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 152
def get_new_order_from(orders_sorted)
  last_code_order = orders_sorted.inject(0) { |agr, x| ((x > agr) && (x - agr) > 1) ? agr : x }
  (last_code_order + 1)
end
get_new_tag_order(period_base, code) click to toggle source

get a new code order

# File lib/payrollee_cz/core/payroll_process.rb, line 120
def get_new_tag_order(period_base, code)
  get_new_tag_order_from(@terms, period_base, code)
end
get_new_tag_order_from(term_hash, period_base, code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 124
def get_new_tag_order_from(term_hash, period_base, code)
  get_new_tag_order_in_array(term_hash.keys, period_base, code)
end
get_new_tag_order_in_array(keys_array, period_base, code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 128
def get_new_tag_order_in_array(keys_array, period_base, code)
  selected_tags = select_tags_for_code(keys_array, period_base, code)
  mapped_orders = map_tags_to_code_orders(selected_tags)
  get_new_order_from(mapped_orders.sort)
end
get_result(pay_tag) click to toggle source

get term from Results by key of tag

# File lib/payrollee_cz/core/payroll_process.rb, line 66
def get_result(pay_tag)
  @results.select { |key,_| key==pay_tag }
end
get_results() click to toggle source

get term from Results by key of tag

# File lib/payrollee_cz/core/payroll_process.rb, line 71
def get_results
  @results
end
get_tag_order_from(term_hash, period_base, code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 134
def get_tag_order_from(term_hash, period_base, code)
  get_tag_order_in_array(term_hash.keys, period_base, code)
end
get_tag_order_in_array(keys_array, period_base, code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 138
def get_tag_order_in_array(keys_array, period_base, code)
  selected_tags = select_tags_for_code(keys_array, period_base, code)
  mapped_orders = map_tags_to_code_orders(selected_tags)
  get_first_order_from(mapped_orders.sort)
end
get_term(pay_tag) click to toggle source

get term from Terms by key of tag

# File lib/payrollee_cz/core/payroll_process.rb, line 61
def get_term(pay_tag)
  @terms.select { |key,_| key==pay_tag }
end
ins_term(period_base, term_refer, code_order, term_values) click to toggle source

add fetched term

# File lib/payrollee_cz/core/payroll_process.rb, line 28
def ins_term(period_base, term_refer, code_order, term_values)
  ins_term_to_hash(@terms, period_base, term_refer, code_order, term_values)
end
ins_term_to_hash(term_hash, period_base, term_refer, code_order, term_values) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 32
def ins_term_to_hash(term_hash, period_base, term_refer, code_order, term_values)
  term_to_insert = new_term_pair_with_order(period_base, term_refer, code_order, term_values)
  term_hash.merge!(term_to_insert)
  term_to_insert.keys[0]
end
map_tags_to_code_orders(keys_array) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 144
def map_tags_to_code_orders(keys_array)
  keys_array.map { |x| x.code_order }
end
merge_term_to_hash(term_hash, period_base, term_refer, term_values) click to toggle source

add term for a new or ignore for existing term

# File lib/payrollee_cz/core/payroll_process.rb, line 51
def merge_term_to_hash(term_hash, period_base, term_refer, term_values)
  merge_code_order = get_tag_order_from(term_hash, period_base, term_refer.code)
  term_to_merge = new_term_pair_with_order(period_base, term_refer, merge_code_order, term_values)
  term_hash.merge!(term_to_merge) do |tag, term_concept, _|
    term_concept
  end
  term_hash
end
new_term_concept(term_refer, term_values) click to toggle source

create concept with value of amount, for tag code, figure out concept name

# File lib/payrollee_cz/core/payroll_process.rb, line 98
def new_term_concept(term_refer, term_values)
  term_tag = tags.tag_from_models(term_refer)
  base_concept = concepts.concept_from_models(term_tag)
  term_concept = base_concept.dup_with_value(term_tag.code, term_values)
end
new_term_key_with_order(period_base, term_refer, code_order) click to toggle source

create key (class TagRefer) with period, code, code_order

# File lib/payrollee_cz/core/payroll_process.rb, line 93
def new_term_key_with_order(period_base, term_refer, code_order)
  term_key = TagRefer.new(period_base, term_refer.code, code_order)
end
new_term_pair(term_hash, period_base, term_refer, term_values) click to toggle source

create pair of TagRefer and PayrollConcept with a new code order

# File lib/payrollee_cz/core/payroll_process.rb, line 112
def new_term_pair(term_hash, period_base, term_refer, term_values)
  new_code_order = get_new_tag_order_from(term_hash, period_base, term_refer.code)
  term_key = new_term_key_with_order(period_base, term_refer, new_code_order)
  term_concept = new_term_concept(term_refer, term_values)
  {term_key => term_concept}
end
new_term_pair_with_order(period_base, term_refer, code_order, term_values) click to toggle source

create pair of TagRefer and PayrollConcept with code order

# File lib/payrollee_cz/core/payroll_process.rb, line 105
def new_term_pair_with_order(period_base, term_refer, code_order, term_values)
  term_key = new_term_key_with_order(period_base, term_refer, code_order)
  term_concept = new_term_concept(term_refer, term_values)
  {term_key => term_concept}
end
select_tags_for_code(keys_array, period_base, code) click to toggle source
# File lib/payrollee_cz/core/payroll_process.rb, line 148
def select_tags_for_code(keys_array, period_base, code)
  keys_array.select { |x| x.period_base==period_base && x.code==code }
end