YaleSTC/shifts

View on GitHub
app/models/department.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Department < ActiveRecord::Base
  belongs_to :admin_permission, class_name: "Permission", dependent: :destroy
  has_one :department_config, dependent: :destroy
  has_many :notices, dependent: :destroy
  has_many :loc_groups, dependent: :destroy
  has_many :departments_users, dependent: :destroy
  has_many :users, through: :departments_users
  has_many :roles, dependent: :destroy
  has_many :shifts
  has_many :locations, through: :loc_groups
  has_many :data_types, dependent: :destroy
  has_many :data_objects, through: :data_types
  has_many :payforms
  has_many :payform_sets
  has_many :categories
  has_many :punch_clocks
  has_many :punch_clock_sets
  has_many :user_profile_fields
  has_many :calendars, dependent: :destroy do
    def default
      find(:first, conditions: {default: true})
    end
  end

  before_validation :create_permissions, on: :create
  before_validation :update_permissions, on: :update
  validates_uniqueness_of :name
  validates_uniqueness_of :admin_permission_id
  
# Returns all users active in a given department
  def active_users
    joins = DepartmentsUser.where(department_id: self, active: true)
    joins.map{|j| User.find(j.user_id)}
  end

# Simplifies some permission-checking methods greatly
  def department
    self
  end
  
  def current_notices
    Notice.active.global
  end
    
  def sub_requests
    SubRequest.where("end >= ?", Time.now).select { |sub| sub.shift.department == self }
  end

  def links
    Link.where(department_wide: true)
  end
  
#  has_and_belongs_to_many :users
  private
  def create_permissions
    self.create_admin_permission(name: name + " dept admin")
  end

  # in case department name is changed, should update permissions accordingly
  def update_permissions
    self.admin_permission.update_attribute(:name, name + " dept admin")
  end

end