# -*- coding: utf-8 -*-
class ReportObserver < ActiveRecord::Observer
observe :report, :done_work, :done_employee, :done_material

  def after_create(obj)    
    if obj.class.to_s == "Report"
      Audit.create(:employee => Employee.current_user, :report => obj, :comment => "Отчет создан")
    elsif obj.class.to_s == "DoneWork" && obj.report.audits.size > 0 # создаем записи только при редактировании отчета.
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Добавлена работа", :new_value => obj.work_name)
    elsif obj.class.to_s == "DoneEmployee" && obj.report.audits.size > 0 # создаем записи только при редактировании отчета.
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Добавлен сотрудник", :new_value => obj.empl_name)
    elsif obj.class.to_s == "DoneMaterial" && obj.report.audits.size > 0 # создаем записи только при редактировании отчета.
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Добавлен материал", :new_value => obj.material_name)
    end
  end

  def before_update(obj)    
      @audits = []

    if obj.class.to_s == "Report"
      changes = obj.changes() 
      changes.each do |attr_name, values|
        @old_val = values[0]
        @new_val = values[1]
        case attr_name
        when 'sum'
          name = 'Общая сумма заработной платы'
        when 'closed_at'
          name = 'Удален'
        when 'disp_wage'
          name = 'ЗП диспетчера'
        when 'total_sum_get_money'
          name = 'Всего получено с клиента' if values[0].to_i != values[1].to_i
        when 'bonus_manager'
          name = 'Бонус менеджеру'
        when 'bonus_sale'
          name = 'Бонус за продажу'
        when 'total_sum_comment'
          name = 'Обоснование невзятия денег'
        when 'total_sum_works'
          name = 'Всего за работы'  if values[0].to_i != values[1].to_i
        when 'money_type'
          name = 'Нал/безнал'
          @old_val = Report.new(:money_type =>values[0]).money_type_name
          @new_val = obj.money_type_name
        when 'get_money_status'
          name = 'Оплата'
          @old_val = Report.new(:get_money_status =>values[0]).get_money_status_form
          @new_val = obj.get_money_status_form
        when 'total_sum_materials'
          name = 'Всего за материалы' if values[0].to_i != values[1].to_i
        when 'total_acc_sum'
          name = 'Деньги на счет' if values[0].to_i != values[1].to_i
        when 'date'
          name = 'Дата' if values[0].to_date != values[1].to_date        
        when 'status'
          name = 'Статус'
          @old_val = Report.status_name(values[0])
          @new_val = Report.status_name(values[1])
        when 'name'
          name = 'Логин'
        when 'category'
          name = 'Категория'
          if values[0] && cat = (Category.find values[0])
            @old_val = cat.name
          end
          if values[1] && cat = (Category.find values[1])
            @new_val = cat.name
          end
        when ''
        else 
          name = nil
        end
        a = Audit.create(:employee => Employee.current_user, :report => obj, :comment => name, :old_value => @old_val, :new_value => @new_val) if name
        @audits << a if Employee.current_user
      end

    elsif obj.class.to_s == "DoneWork"
      changes = obj.changes() 
      changes.each do |attr_name, values|
        case attr_name
        when 'count'
          name = "Работа: #{obj.work_name}. Изменено кол-во"
        when 'get_money'
          name = "Работа: #{obj.work_name}. Изменена стоимость"
        else
          name = nil
        end
        a = Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => name, :old_value => values[0], :new_value => values[1]) if name
        @audits << a if Employee.current_user
      end
    elsif obj.class.to_s == "DoneEmployee"
      changes = obj.changes() 
      changes.each do |attr_name, values|
        case attr_name
        when 'empl_name'
          name = "Изменен сотрудник"
        else
          name = nil
        end
        a = Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => name, :old_value => values[0], :new_value => values[1]) if name
        @audits << a if Employee.current_user
      end
    end
      if obj.department == 'private' && @audits.compact.select{ |i| i.comment == 'Статус' && i.new_value != 'Утверждено'}.size > 0 
        ReportMailer.deliver_changes_for_empl(@audits.compact.first.report, @audits.compact)
      end

  end


  def after_destroy(obj)   
    if obj.class.to_s == "DoneWork"
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Удалена работа", :old_value => obj.work_name)
    elsif obj.class.to_s == "DoneEmployee"
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Удален сотрудник", :old_value => obj.empl_name)
    elsif obj.class.to_s == "DoneMaterial"
      Audit.create(:employee => Employee.current_user, :report => obj.report, :comment => "Удален материал", :old_value => obj.material_name)
    end
  end

end
