class Verificator

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Public Class Methods

new(dates) click to toggle source
# File lib/tmis/engine/verificator.rb, line 5
def initialize(dates)
  @dates = dates.to_a
end

Public Instance Methods

verify(verification) click to toggle source
# File lib/tmis/engine/verificator.rb, line 9
def verify(verification)
  case verification
  when :lecturer_studies
    lecturer_studies
  when :cabinet_studies
    cabinet_studies
  when :lecturer_stubs
    lecturer_stubs
  when :cabinet_stubs
    cabinet_stubs
  when :subject_stubs
    subject_stubs
  when :group_and_subgroups
    group_and_subgroups
  when :preferred_days
    preferred_days
  when :computer_cabinets
    computer_cabinet
  else
    raise ArgumentError, 'No such verification'
  end
end

Private Instance Methods

cabinet_stubs() click to toggle source
# File lib/tmis/engine/verificator.rb, line 53
def cabinet_stubs
  @dates.map do |date|
    [date, Study.joins(:cabinet).where('cabinets.stub = ?', true).where(date: date)]
  end
end
cabinet_studies() click to toggle source
# File lib/tmis/engine/verificator.rb, line 41
def cabinet_studies
  @dates.map do |date|
    Study.select('date, number, cabinet_id, count(*)').where(date: date).group('number, cabinet_id').having('count(*) > 1')
  end.flatten.map{|x| Study.where(date: x.date, number: x.number, cabinet_id: x.cabinet_id )}.flatten.group_by{|x| [x.date, x.cabinet_id, x.number] }
end
computer_cabinet() click to toggle source
# File lib/tmis/engine/verificator.rb, line 65
def computer_cabinet
  @dates.map do |date|
    [date, Study.joins(:cabinet).where(groupable_type: 'Subgroup').where("cabinets.with_computers = ?", false).where(date: date)]
  end
end
lecturer_stubs() click to toggle source
# File lib/tmis/engine/verificator.rb, line 47
def lecturer_stubs
  @dates.map do |date|
    [date, Study.joins(:lecturer).where('lecturers.stub = ?', true).where(date: date)]
  end
end
lecturer_studies() click to toggle source
# File lib/tmis/engine/verificator.rb, line 34
def lecturer_studies
  @dates.map do |date|
    Study.select('date, number, lecturer_id, count(*)').where(date: date).group('number, lecturer_id').having('count(*) > 1')
  end.flatten.map{|x| Study.where(date: x.date, number: x.number, lecturer_id: x.lecturer_id )}.flatten.group_by{|x| [x.date, x.lecturer_id, x.number] }
  #@dates.map{ |date| Study.select('id, date, number, lecturer_id, count(*)').where(date: date).group('number, lecturer_id').having('count(*) > 1').to_a }
end
preferred_days() click to toggle source
# File lib/tmis/engine/verificator.rb, line 71
def preferred_days
  @dates.map do |date|
    #[date, Study.joins(:lecturer).where(date: date).where("NOT instr(preferred_days, strftime('%w', date))")] # doesn't work on windows
    #[date, Study.joins(:lecturer).where(date: date).where("NOT preferred_days like strftime('%w', date)")]
    [date, Lecturer.all.map do |l|
      if l.preferred_days
        l.studies.where(date: date).where("NOT strftime('%w', date) in (#{l.preferred_days.split(/,\s*/).map{|s| '\'' << s << '\''  }.join(',')})", ).to_a
      end
    end.flatten.compact]
  end
end
subject_stubs() click to toggle source
# File lib/tmis/engine/verificator.rb, line 59
def subject_stubs
  @dates.map do |date|
    [date, Study.joins(:subject).where('subjects.stub = ?', true).where(date: date)]
  end
end