Module: PeoplesoftModels::EffectiveScope

Defined in:
lib/peoplesoft_models/effective_scope.rb

Constant Summary collapse

COLUMNS =
["effdt", "effseq"]

Instance Method Summary collapse

Instance Method Details

#effdt_values(as_of = Date.today) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/peoplesoft_models/effective_scope.rb', line 21

def effdt_values(as_of = Date.today)
  table = self.arel_table
  columns = self.non_effective_keys + [table[:effdt].maximum.as("effdt")]

  self.unscoped
      .select(columns)
      .where(table[:effdt].lteq(as_of))
      .group(self.non_effective_keys)
end

#effective(as_of = Date.today) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/peoplesoft_models/effective_scope.rb', line 5

def effective(as_of = Date.today)
  table = self.arel_table
  eff_keys = self.effective_key_values(as_of).as(eff_keys_relation_alias)
  join_conditions = self.primary_keys.map { |key| table[key].eq(eff_keys[key]) }.reduce(:and)

  self.joins("INNER JOIN #{eff_keys.to_sql} ON #{join_conditions.to_sql}")
end

#effective_key_values(as_of = Date.today) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/peoplesoft_models/effective_scope.rb', line 13

def effective_key_values(as_of = Date.today)
  if self.effective_keys.include?("effseq")
    self.effseq_values
  else
    self.effdt_values
  end
end

#effective_keysObject



44
45
46
# File 'lib/peoplesoft_models/effective_scope.rb', line 44

def effective_keys
  self.primary_keys & COLUMNS
end

#effseq_values(as_of = Date.today) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/peoplesoft_models/effective_scope.rb', line 31

def effseq_values(as_of = Date.today)
    table = self.arel_table
    effdt_keys = self.effdt_values(as_of).as(effdt_relation_alias)
    join_columns = self.primary_keys - ["effseq"]
    columns = join_columns + [table[:effseq].maximum.as("effseq")]
    join_conditions = join_columns.map { |key| table[key].eq(effdt_keys[key]) }.reduce(:and)

    self.unscoped
        .select(join_columns + [table[:effseq].maximum.as("effseq")])
        .joins("INNER JOIN #{effdt_keys.to_sql} ON #{join_conditions.to_sql}")
        .group(join_columns.map { |key| table[key] })
end

#non_effective_keysObject



48
49
50
# File 'lib/peoplesoft_models/effective_scope.rb', line 48

def non_effective_keys
  self.primary_keys - COLUMNS
end