# -*- coding: utf-8 -*-
class OfficeMatsController < ApplicationController
  $department = 'office'
  $department_id = '322'
  before_filter :isAuthorization
  before_filter :set_var

  def index
    @reports = Report.for_department('office').in_period(@date_from, @date_to)
    if params[:filter_empl] && params[:filter_empl].to_i != 0
      @reports = @reports.select{ |i| i.done_materials.select{ |c| c.employee_id.to_i == params[:filter_empl].to_i}.size > 0}
    end
    @employee = @reports.map{ |i| i.done_materials.map{|c| [c.employee_name, c.employee_id]}.flatten }.uniq - [[]]
  end
  
  def new
    @category = Category.find(:first, :conditions => "department = 'office'")
    @report = Report.new(:department => 'office', :date => Time.now, :status => 2, :category => @category.id)
    @report.done_employees.build(:employee => @current_user, :time_addwork => '', :time_stopwork =>'')
    @materials = @current_user.materials
  end

  def create
    @report = Report.new(params[:report])
    respond_to do |format|
      if @report.save
        flash[:notice] = 'Запись обновлена'
        format.html { redirect_to office_mats_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
      else
        flash[:error] = @report.errors.each_full { |msg| puts msg }
        format.html { redirect_to :action => :new}
      end
    end
  end

  def destroy
    @report =   Report.find(params[:id])
    if @boss || @report.status == 0
      if @report.destroy
        flash[:notice] = 'Отчет № ' + params[:id] + ' был удален!'
      else
        messages = ''
        flash[:error] = @report.errors.each_full {|msg| messages += msg + "<br/>"}
      end
    else
      flash[:error] = "Отчет был переведен в статус #{@report.status_name}, правка возможна только superuser."
    end

    respond_to do |format|
      format.html { redirect_to office_mats_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
    end
  end




  def change_materials
    @employee = Employee.find params[:employee]
    
    @materials = @employee.materials(params[:report_date])
    render :update do |page|
      page.replace_html 'materialsArea', :partial => 'material'
    end
  end


  def stats
    @materials = DoneMaterial.office.in_dates(@date_from, @date_to).with_empl(params[:filter_empl]).find(:all, :select => "employee_name, employee_id, material_id id, material_name, SUM(count) as count", :group => "material_id")
    @employee = @materials.map{ |i| [i.employee_name, i.employee_id] }.uniq
  end



  private

  def set_var
    Employee.current_user = Employee.find(session[:user_id]) unless session[:user_id].nil?
    $department = 'office'
    $department_id = '322'
    cookies[:sys_dep] = { :value => $department }
    @current_user = @employee = Employee.current_user
    @boss = (@current_user.accesses.for_department('office').size > 0 && @current_user.accesses.for_department('office').first.access_superuser == 1)
     if (params[:date_from] && params[:date_to])
       @date_from = params[:date_from].to_date
       @date_to = params[:date_to].to_date
     else
       @date_from = Date.today.beginning_of_month
       @date_to = Date.today.end_of_month
     end

  end



end
