# -*- coding: utf-8 -*-
## Шаблон работы менеджеров, используется у альпов, по умолчанию бригадир - Narbelet.
class RegularManagerShift < RegularShift
  has_many :manager_shifts, :foreign_key => "regular_shift_id", :before_add => :set_attrs_for_shift


  def self.create_shifts_for_department_for_period(dep, month)
    regs = RegularManagerShift.find(:all, :conditions =>"department = '#{dep}'")
    from = month.beginning_of_month
    to = month.end_of_month
    for r in regs do
      # находим все даты для выбранного дня недели (все понедельники)
      if  r.day_of_week == 7
        ar = [0]
      else
        ar = [r.day_of_week]
      end
      dates_for_shifts = (from..to).to_a.select {|k| ar.include?(k.wday)}
      for dshift in dates_for_shifts do
        ManagerShift.create(:employee_id => r.employee_id, :department => r.department, :shift_date => dshift, :regular_shift_id => r.id)
      end
    end
  end

  
  def self.update_regulars(reg_was, new_shifts)
    reg_update = reg_was.select{|i| new_shifts.map{|c| c.employee_id}.include? i.employee_id}
    reg_destroy = reg_was.select{|i| !(new_shifts.map{|c| c.employee_id}.include? i.employee_id)}
    reg_new = new_shifts.select{|i| !(reg_was.map{|c| c.employee_id}.include? i.employee_id)}
    for r in reg_destroy do
      r.destroy
    end
    for r in reg_update do
      new_r = new_shifts.select{ |i| i.employee_id == r.employee_id}.first
      r.update_attributes(:time_from => new_r.time_from, :time_to => new_r.time_to) if new_r
    end
    for r in reg_new do
      rws = self.create(:time_from => r.time_from, :time_to => r.time_to, :department => r.department, :employee_id => r.employee_id, :day_of_week => r.shift_date.strftime('%u'))
      r.update_attribute(:regular_shift_id, rws.id)
    end    
  end


  private
  def set_attrs_for_shift(shift)
    shift.employee_id = self.employee_id
    shift.time_from = time_from
    shift.time_to = time_to
    shift.department = department    
  end
end

