# -*- coding: utf-8 -*-
class OtherWorksController < ApplicationController
  $department = 'other_works'
  $department_id = '1111'
  before_filter :isAuthorization
  before_filter :set_var

  def index
    @reports = Report.in_period(@date_from, @date_to).find(:all, :conditions => "reports.department IN ('between_logins', 'to_login', 'from_login') AND com_stay_work != 'Большая чистка'")
    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.first.employee_name, i.done_materials.first.employee_id] if i.done_materials.size > 0}.uniq.compact - [[]]
  end
  
  def new    
      permition = false
    if params[:department] == "between_logins" && @access.access_delete.to_i == 1
      permition = true
    elsif params[:department] == "to_login" && @access.access_read.to_i == 1
      permition = true
    elsif params[:department] == "from_login" && @access.access_write.to_i == 1
      permition = true
    end
    
    if permition == true
    category = Category.for_department(params[:department]).first
    @report = Report.new(:department => params[:department], :date => Time.now, :status => 2, :category => category.id)
    @report.done_employees.build(:employee => @current_user, :time_addwork => '', :time_stopwork =>'')
    if params[:department] == 'from_login'
      render :template => "/other_works/from_login"
    end
    else
       @errors = "В доступе отказано!"
      render(:partial => "shared/errors")
    end
  end

  def create
    @report = Report.new(params[:report])
    
    if @report.department == "between_logins" 
      inst_val = 9
    elsif @report.department == "from_login"
      @empl = Employee.find params[:empl_id]
      @report.done_employees.build(:employee => @empl)
      @report.done_materials.each do |dm|
        dm.employee_id = @empl.id
        dm.employee_name = @empl.login
      end
    else
      inst_val = 8
      params[:materials].to_a.each do |key, value|
      if (value[:count]).to_i > 0
        @employee = @report.done_employees.first.employee
        @report.done_materials << DoneMaterial.new(:material_name => value[:name], :material_id =>key.to_s, :employee_name => @employee.login, :employee_id => @employee.id, :count =>(value[:count].to_i), :store_complete => true, :date => Date.today, :inst_type => inst_val, :pay_type => 1)
      end      
      end
    end

    
    respond_to do |format|
      if @report.done_materials.size > 0       
      if @report.save
        flash[:notice] = 'Запись создана'
        format.html { redirect_to other_works_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, :department => @report.department}
      end
      else
        flash[:error] = "Не выбраны материалы!"
        format.html { redirect_to :action => :new, :department => @report.department}      
      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 other_works_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
    end
  end




  def change_materials
    @materials =  StoreSoap.materials_on_objects_with_pay_type(params[:login], params[:date].to_date) 
    render :update do |page|
      page.replace_html 'materialsArea', :partial => 'material'
    end
  end

  def new_material
    render :update do |page|
      page.insert_html :top, 'materialsArea', :partial => 'new_material', :locals => {:count => params[:count]}
    end
  end


  def stats
    @materials = DoneMaterial.in_dates(@date_from, @date_to).with_empl(params[:filter_empl]).find(:all, :conditions => "done_materials.department IN ('between_logins', 'to_login', 'from_login')", :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 = 'other_works'
    $department_id = '11111'
    cookies[:sys_dep] = { :value => $department }
    @employee = @current_user = Employee.current_user
    @access = @current_user.accesses.for_department('other_works').first
    @boss = (@access && @access.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
