# -*- coding: utf-8 -*-
class PrivateController < ApplicationController

  # Отдел
  $department = 'private'
  $department_id = '152'

  # Авторизация (файл: controllers/application.rb)
  before_filter :isAuthorization

  # Права доступа (файл: controllers/application.rb)
  around_filter :isAccessRead
  around_filter :isAccessWrite, :only => [:saveReport, :delReport]
#  around_filter :isAccessDelete, :only => :delReport
#  around_filter :isAccessSuper, :only => :localrequest
  around_filter :isAccessSuper, :only => [:stats, :localrequest, :stat_reports]
  before_filter :set_employees, :only => [:stats, :index, :employees]

  # Конструктор
  before_filter :set_var
  before_filter :construct
  before_filter :get_reports, :only => [:index, :index_excel]

  def construct

    # Устанавливаем сессионную куку.
    cookies[:sys_dep] = { :value => $department }

      # Тип работ над объектом
      $category_info = CategoryDB.getCategory($department)


      # Статусы
      $status = [{'name'=>'Выполнено'}, {"name"=>'Принято'}, {'name'=>'Отказано'}]

      # Сотрудники
      $employeesAll = EmployeesDB.getEmployees("*")
      $employeesGroup = EmployeesDB.getEmployees(session[:user_department])

      # Формируем сессию
      params.each { |key, value| session[""+key+""] = value }
      $session = session


  end



  # ===========================================> START <======================================== #



  def addReport
    @page_title = 'Добавить отчет'
    @currPage = "addReport"

    if params
      @report = Report.new(:status => 0)
      @report.name = (params[:client_login])
      @report.total_acc_sum = params[:sumacnt] if  params[:sumacnt]
      @report.request_acc_sum = params[:sumacnt] if  params[:sumacnt]
      if iptvs = params[:iptv]
        for iptv in iptvs do
          iptv = iptv.last
          #            iptv.name   # 1 - 'DUNE HD TV-101'(store_id = 1614)
          #            iptv.inst_type  # 1-аренда, 2-куплена
          @report.com_other_materials = "Была #{if iptv[:pay_type] == '2' then 'Куплена' else 'Арендована' end} приставка 'DUNE HD TV-101'"
        end
      end
      if(params[:client_login])
        case params[:order_type]
        when 0, '0'
          @report.category = 21
          @report.style =  @report.category_name
        when 1, '1'
          @report.category = 22
          @report.style = @report.category_name
        when 2, '2'
          @report.category = 23
          @report.style = @report.category_name
        when 3, '3'  ### Предполагаю что это телефония
          @report.category = 39
          @report.style = @report.category_name
        when 4, '4'  ### Подключение с альпами
          @report.category = 59
          @report.style = @report.category_name
        end
        if params[:username] == 'Mr.Light'
          @report.category = 40
          @report.style = @report.category_name
        end
        if params[:date] && !params[:date].blank?
          @report.date = params[:date].split('.').reverse.join("-")
        else
          @report.date = Date.today
        end
        if (count_dates = (Date.today - @report.date.to_date).to_i) > 2 ### Если отписка через два дня  и более после подключения то штраф.
          @report.zp_fine_sum = (135 * (count_dates -2))
        end
        user_name = Employee.find_by_login params[:username]
        if user_name
          @report.done_employees.build(:employee => user_name, :role=>1)
        end
      elsif params[:t_login] ### Значит передается из другого места http://request.rinet.ru/edit.php?page=ednotconn&index=84729&url=%2Fmain.php%3Fpage%3Dconnect-o
        @report.status = 0
        @report.name = (params[:t_login])
        user_name = Employee.find_by_login params[:t_empl]
        @report.category = params[:t_ct]
        @report.date = Time.at(params[:t_date].to_i)
        @report.request_id = params[:t_id]
        @report.com_stay_work = params[:com_stay_work]
        if user_name
          @report.done_employees.build(:employee => user_name, :role=>1)
        end   
      end     
    else 
      @report = Report.new(:category => 21, :date => Date.today, :status => 0)
      @report.done_employees.build(:employee => Employee.current_user)
    end
    @report.category = Category.private.first if @report.category.nil?
    @report.department = 'private'
    @report.money_type = 3
    @top_works = DoneWork.top_works(@report)
    @pricelist = Division.private.pricelist + Work.private

    @pricelist = @top_works + (@pricelist - @top_works)

  end

  def create
    @report = Report.new(params[:report])
    @report.department = 'private'
    @report.calculate
    if Report.private.with_category(@report.category).in_period(@report.date.to_date - 3.days, @report.date.to_date + 3.days).map{|i| i.name}.include? @report.name
      @report.errors.add(:name, 'На этой неделе заявка с данным логином уже была создана! ')
    else
      @report.save
    end
    if @report.new_record?
      flash.now[:error] = @report.errors.each_full { |msg| puts msg }
    end
    respond_to do |format|
      unless flash.size > 0
        flash[:notice] = 'Запись обновлена'
        format.html { redirect_to private_index_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
        format.xml  { head :ok }
      else
        @pricelist = Division.private.pricelist + Work.private
        format.html { render :action => "addReport", :report => @report }
      end
    end
  end

  def edit
    @page_title = 'Редактировать отчет'

    @report = Report.find(params[:id])
    @pricelist = (Division.private.pricelist.with_category(@report.category) + Work.private).uniq
    @top_works = (@report.done_works.map{|i| i.work} + DoneWork.top_works(@report)).uniq
    @pricelist = @top_works + (@pricelist - @top_works)
  end

  def update
    @report = Report.find(params[:id])
    @report.attributes = params[:report]  
    @report.calculate
    respond_to do |f|
      if  (@report.finn_closed != true || (@report.total_sum_get_money_was.to_f == @report.total_sum_get_money))
        if @boss || @report.status == 0
          if @report.save
            if @report.status.to_i == 1 && @report.status_false_tracker_id.nil? # Посылаем данные в теговалку
              url = URI.escape("http://tag.rinet.ru/tag?reg_id=30&src_id=#{@report.id}&author=#{@current_user.login}&comm=отклонен отчет&login=#{@report.name}")
              require 'httparty'
              resp = HTTParty.get(url)
              tracker_id = MultiJson.load(resp.parsed_response)["tracker_id"]     
              @report.update_attributes(:status_false_tracker_id => tracker_id) if tracker_id           
            end
            flash[:notice] = 'Запись обновлена'
            f.html { redirect_to private_index_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
          else
            @pricelist = Division.private.pricelist
            flash.now[:error] = @report.errors.each_full { |msg| puts msg }
            f.html { render :action => "edit" }
          end
        else
          flash[:error] = "Отчет был переведен в статус #{@report.status_priv_name}, правка возможна только superuser."
          @pricelist = Division.private.pricelist + Work.private
          f.html { render :action => "edit" }
        end
      else
        flash[:error] = "Отчет был проведен в финне (деньги сданы), правка невозможна. Если правка необходима, нужно удалить запись о приеме денег в финне."
        @pricelist = Division.private.pricelist + Work.private
        f.html { render :action => "edit" }
      end
    end
  end

  def destroy
    @report =   Report.find(params[:id])
    if @report.finn_closed != true
      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_priv_name}, правка возможна только superuser."
      end
    else
      flash[:error] = 'Отчет был проведен в финне (деньги сданы), удаление невозможно. Если правка необходима, нужно удалить запись о приеме денег в финне.'
    end
    respond_to do |format|
      format.html { redirect_to private_index_path(:filter_month => @report.date.to_date.month, :filter_year => @report.date.to_date.year)}
    end
  end


  def update_sum
    if params[:id]
      @report = Report.find params[:id]
    else
      @report = Report.new
      @report.department = 'private'
    end
    @report.attributes = params[:report]
    @report.calculate
     render :update do |page|
      page.replace_html  'sums', :partial => 'sum', :locals =>{:report => @report}
    end
  end

  def change_materials
    @employees = Employee.find params[:employees].split(',')
    render :update do |page|
#      <%= render :partial => "material", :locals =>{:employee => d_empl.employee} %>
      page.insert_html  :bottom, 'materialsArea', :partial => 'material', :collection => @employees, :as => :employee
      page.call "check_category"
    end
  end

  def confirm
    @report = Report.new(params[:report])
    @employees = (@report.done_employees || @current_user.to_a).map{ |i| i.employee}
    @problems = (params[:sanps] == '1') #   # Отчет с (без) проблем
    @write_off_materials = Hash.new([])
    if params[:materials]
      for mat in params[:materials] do
        id = mat[0].split("_")[4].to_i
        employee = mat[0].split("_")[5].to_i
        count = mat[1]["count"].to_i
        @write_off_materials[employee] += [id => count]
      end
    end
    render :update do |page|
      page.call 'modal_window', 'window2'
      page.replace_html  'yield2', :partial => 'confirm', :object => @employees
    end
  end



  def index
  end

  def index_excel
    require 'spreadsheet'
    Spreadsheet.client_encoding = 'UTF-8'
    book = Spreadsheet::Workbook.new
    dataBook1 = book.create_worksheet :name => 'book'
    i = 0
      row = dataBook1.row(i)
      row[0] = "ID"
      row[1] = "Логин"
      row[2] = "Дата"
      row[3] = "Состав группы"
      row[4] = "З/П мастера"
      row[5] = "Тип работ"
      row[6] = "Работы"
      row[7] = "Материалы"
      row[8] = "Комментарий"
      row[9] = "Сумма за работы"
      row[10] = "Сумма за оборудование"
      row[11] = "На счет"
      row[12] = "Получено денег"
    row[13] = "Последняя правка"
    row[14] = "Статус"
    
    for report in @reports do
      
      i += 1
      row = dataBook1.row(i)
      row[0] = report.id
      row[1] = report.name
      row[2] = report.date.to_date
      row[3] = report.done_employees.map{|e| e.empl_name}.join(',')
      row[4] = report.sum.to_f
      row[5] = report.categor.name
      row[6] = report.done_works.map{|w| w.work_name+":"+w.count}.join(", ")
      row[7] = report.done_materials.map{|m| m.material_name+":"+m.count}.join(", ")
      row[8] = report.com_stay_work
      row[9] = report.total_sum_works.to_f
      row[10] = report.total_sum_materials.to_f
      row[11] = report.total_acc_sum
      row[12] = report.total_sum_get_money
      row[13] = report.user_editor_name
      row[14] = report.status_name
    end
    # Write book
    @file = 'excel-' + rand().to_s + '.xls'
    book.write 'public/'+@file
    render :layout => false
  end


  def stats
    @page_title = 'Статистика по з/п'
    @currPage = "stats"
    @free_works = Work.find(:all, :conditions => "CAST(price as BINARY) = 0").map{|i| i.id}
    @free_pricelist = Pricelist.find(:all, :conditions => "CAST(price as BINARY) = 0").map{|i| i.id}


    if (params[:filter_month] && params[:filter_year])
      month = params[:filter_month].to_s
      year = params[:filter_year].to_s
    else
      month = Date.today.month.to_s
      year = Date.today.year.to_s
    end
    @date = (month +'/01/' + year).to_date
    empl =  params[:filter_empl]
    category = params[:filter_category]
    @d_employees = DoneEmployee.with_empl(empl).with_category(category).find(:all, :conditions => ["reports.status = 2 AND done_employees.department = 'private' AND DATE(done_employees.date_create_report) BETWEEN ? AND ? ", @date.to_date.beginning_of_month.to_date, @date.end_of_month.to_date], :include => :report, :order => 'done_employees.empl_name')
  end


  def employees
     render :update do |page|
      page.replace_html  'employees', :partial => 'employees'#, :locals =>{:report => @report}
    end


  end




 def localrequest
    ### PAGE INFO
    @page_title = 'Имитация Реквеста'
    @currPage = "request"

    now = Time.now
    @date = now.to_date
  end



   def stats_materials_for_dates
     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
     ord = "material_name"
     ord =  "a " + params[:a] if params[:a]
     ord =  "b " + params[:b] if params[:b]
     ord =  "c " + params[:c] if params[:c]
     ord =  "d " + params[:d] if params[:d]
     ord =  "e " + params[:e] if params[:e]
     ord =  "abcd " + params[:abcd] if params[:abcd]
     @materials = DoneMaterial.private.in_dates(@date_from, @date_to).with_empl(params[:filter_empl]).find(:all, :select => "material_id id, material_name, SUM(IF(pay_type = 1 AND inst_type = 1, count, 0)) as a, SUM(IF(pay_type = 2 AND inst_type = 1, count, 0)) as b, SUM(IF(pay_type = 5 AND inst_type = 1, count, 0)) as c, SUM(IF(pay_type = 3 AND inst_type = 1, count, 0)) as d, SUM(IF(inst_type = 4, count, 0)) as e, SUM(IF(pay_type IN (1, 2, 3, 5) AND inst_type = 1, count, 0)) as abcd", :group => "material_id", :order => ord)

   end


  def stats_materials
   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



    @materials = DoneMaterial.private.in_dates(@date_from, @date_to).with_empl(params[:filter_empl]).find(:all, :select => "material_name, material_id id", :group => "material_name", :order => "material_name")


    @employees = Division.soft.employees  # ЗП
    @worktype = params[:filter_worktype]
 @reports = Report.private.in_period(@date_from, @date_to).with_empl(params[:filter_empl]).with_category(@worktype).with_material(params[:filter_material]).with_any_material.with_pay_types(params[:filter_inst_types])
 end


 #  def stats_materials
 #    if (params[:filter_month] && params[:filter_year])
 #      month = params[:filter_month].to_s
 #      year = params[:filter_year].to_s
 #    else
 #      month = Date.today.month.to_s
 #      year = Date.today.year.to_s
 #    end
 #    @date = (month +'/01/' + year).to_date
 #    @employees = Division.private.employees  # ЗП
 #    @reports = Report.private.in_month(@date).with_empl(params[:filter_empl]).with_any_material
 # end
  
  def stat_reports     
      @date_from = Date.today - 1.month
      @date_to = Date.today
  end

  def select_stat_reports
   require 'spreadsheet'
    Spreadsheet.client_encoding = 'UTF-8'
    book = Spreadsheet::Workbook.new    
    @date_from = params[:date_from]
    @date_to = params[:date_to]
    @reports = Report.private.in_period(@date_from, @date_to).with_status('2')
    @works = @reports.map{|i| i.done_works.map{|i| i.work_name }}.flatten.uniq
    dataBook1 = book.create_worksheet :name => 'book'
    dataBook1.column(0).width = 8; dataBook1.column(1).width = 20; dataBook1.column(2).width = 20; dataBook1.column(3).width = 20;
    i = 0
    row = dataBook1.row(i)
    row[0] = "#"
    row[1] = "Логин"
    row[2] = "Категория работ"
    row[3] = "Сотрудники"
    c = 3
    for work in @works do
      c += 1
      row[c] = work
    end
    for r in @reports do
      i += 1
      row = dataBook1.row(i)
      row.height = 50
      row[0] = r.id
      row[1] = r.name
      row[2] = r.category_name
      row[3] = r.done_employees.map{|e| e.empl_name}.join(', ')
      c = 3
      for work in @works do
        c += 1
        row[c] = r.done_works.select{|w| w.work_name == work}.map{|w| w.count}.sum.to_f
      end
    end
    # Write book
    @file = 'excel-' + rand().to_s + '.xls'
    book.write 'public/'+@file
    render :template => 'private/select_stat_reports', :layout => false      
  end

  




def search
    ### PAGE INFO
    @page_title = 'Поиск отчетов'
    @currPage = "search"


    # Получаем список сотрудников
    employeesNames = {}
    for val in $employeesAll
      employeesNames[val['id']] = val['login']
    end


    # Получаем список всех работ
    allWorks = WorksDB.getWorks($department)
    allPriceListWorks = PricelistDB.getWorks($department_id)


    # ФИЛЬТРАЦИЯ
    @searchLogin = (params[:s]) ? Check.isText(params[:s]) : ""
  @searchLogin = Check.trim(@searchLogin)


  sqlFIlterDepartment = "a.department='"+$department+"'"
    sqlFIlterDepartment += (@searchLogin!="") ? "&& a.name LIKE '"+@searchLogin.to_s+"%'" : "&& a.id=0"




    # СОРТИРОВКА
    orderParams = ''
    if(params[:sdate])
      if(orderParams!='') then orderParams+=', ' end
      orderParams+='a.date '+params[:sdate]
    end
    if(params[:slogin])
      if(orderParams!='') then orderParams+=', ' end
      orderParams+='a.name '+params[:slogin]
    end
    if(params[:swtype])
      if(orderParams!='') then orderParams+=', ' end
      orderParams+='a.category '+params[:swtype]
    end
    if(params[:ssum])
      if(orderParams!='') then orderParams+=', ' end
      orderParams+='a.sum '+params[:ssum]
    end
    if(params[:sstatus])
      if(orderParams!='') then orderParams+=', ' end
      orderParams+='a.status '+params[:sstatus]
    end



    # Пoлучаем инфу
    allData = ReportsDB.find_by_sql("SELECT
                        a.*,
                        b.empl_id,
                        b.sum AS empl_sum,
                        c.work_id,pricelist,
                        c.count AS work_count
                        FROM reports AS a
                        LEFT JOIN done_employees AS b ON(b.report_id=a.id)
                        LEFT JOIN done_works AS c ON(c.report_id=a.id)
                        WHERE
                        "+sqlFIlterDepartment+"
                        ORDER BY a.id DESC
                    ")


    @result = {}
      i = 0
    for res in allData
      report_id = res['id'].to_i
        if(!@result[report_id])
          @result[report_id] = {}
        end
        @result[report_id]['id'] = res['id']
        @result[report_id]['name'] = res['name']
        @result[report_id]['date'] = res['date'].split('-').reverse.join(".")
        @result[report_id]['sum'] = res['sum'].to_i
        @result[report_id]['status'] = res['status']
        @result[report_id]['category'] = CategoryDB.getCategoryInfo(res['category'].to_s)
            @result[report_id]['numsort'] = i

        # ================================================================ Сохраняем сотрудников
        empl_name = employeesNames[res['empl_id'].to_i].to_s
        if(@result[report_id]['employees'])

          # Проверяем был ли уже сотрудник обработан для этого отчета
          check = false
          @result[report_id]['employees'].each {|empl| if(empl.has_value?(empl_name)) then check=true end }

          if(check==false)
            @result[report_id]['employees'] += [{'name'=>empl_name, 'sum'=>res['empl_sum']}]
          end
        else
          @result[report_id]['employees'] = [{'name'=>employeesNames[res['empl_id'].to_i], 'sum'=>res['empl_sum']}]
        end

        # ================================================================ Сохраняем работы
        if(res['work_id']!=nil)
            pricelist = res['pricelist'].to_i
            work_id = res['work_id'].to_i
            if(allWorks[work_id] || allPriceListWorks[work_id])
                work_name = (pricelist>0) ? allPriceListWorks[work_id]['name'].to_s : allWorks[work_id]['name'].to_s
                work_price = (pricelist>0) ? allPriceListWorks[work_id]['rate'].to_s : allWorks[work_id]['rate'].to_s
                work_sum = res['work_count'].to_i*work_price.to_i
                if(@result[report_id]['works'])

                  # Проверяем была ли уже работа обработана для этого отчета
                  check = false
                  @result[report_id]['works'].each {|wrk| if(wrk.has_value?(work_id)) then check=true end }

                  if(check==false)
                    @result[report_id]['works'] += [{ 'work_id'=>work_id, 'name'=>work_name, 'count'=>res['work_count'], 'price'=>work_price, 'sum'=>work_sum }]
                  end
                else
                  @result[report_id]['works'] = [{ 'work_id'=>work_id, 'name'=>work_name, 'count'=>res['work_count'], 'price'=>work_price, 'sum'=>work_sum }]
                end
            end
        end

       i+=1
  end


    # Делаем возможность сортироки через базу (З.Ы. Идиотская руби) - 2 (пересобираем массив)
    a=0
    @result2 = []
    while a<@result.size
     @result.each {|reportId, info|
       if(info['numsort'].to_i==a.to_i)
            @result2[a]=info
            #@result.delete(reportId)
            break
       end
      }
      a+=1
    end
    @result = @result2

end

 def update_value
   @report = Report.find(params[:id])
   if @report.update_attributes(:status => params[:status],:com_imperfection => params[:text].to_s )
     if @report.status.to_i == 1 && @report.status_false_tracker_id.nil? && @report.done_employees.size > 0 && RAILS_ENV != 'development' # Посылаем данные в теговалку
     url = URI.escape("http://tag.rinet.ru/tag?reg_id=30&src_id=#{@report.id}&author=#{@current_user.login}&comm=отклонен отчет {{{#{@report.done_employees.first.empl_name}}}} &login=#{@report.name}")
     require 'httparty'
     resp = HTTParty.get(url)
     tracker_id = MultiJson.load(resp.parsed_response)["tracker_id"]     
     @report.update_attributes(:status_false_tracker_id => tracker_id) if tracker_id           
   end
     render(:nothing => true)
   else
     render :update do |page|       
       page.alert(@report.errors.each_full { |msg| puts msg })
     end
   end
  end

  def update_topology_status
    report = Report.find(params[:id])    
#    report.update_attributes(:topology_map => params[:topology_map])
    Report.update_all("topology_map = #{params[:topology_map]}", "id = #{report.id}")
    render(:nothing => true)
  end

  # Заявка в трекер о несданной топологии
  def rep_to_tracker
    @report = Report.find params[:id]
    if @boss 
      if @report.topology_problem_tracker_id.nil?
    #    tracker_id = TrackerSoap.report_to_tracker_about_no_topology(@report, @current_user)
        url = URI.escape("http://tag.rinet.ru/tag?reg_id=4&src_id=#{@report.id}&author=#{@current_user.login}&comm=не сдана топология&login=#{@report.name}")
        require 'httparty'
        resp = HTTParty.get(url)
        tracker_id = MultiJson.load(resp.parsed_response)["tracker_id"]
        @report.update_attributes(:topology_problem_tracker_id => tracker_id)
      else
        tracker_id = @report.topology_problem_tracker_id
      end
    else
      @err = "Недостаточно прав!"
    end
    render :update do |page|
      if @err
        page.alert(@err)
      else
        page.call 'ChangeTopologyStatusToId', @report.id, tracker_id
      end
    end
  end

  def rep_to_tracker2
    @report = Report.find params[:id]
    render :update do |page|
      page.replace_html  'new_problems', :partial => 'problems/problem_for_index'
      page.call 'modal_window', 'new_problems'
    end
  end


  def change_price
    if params[:id].to_i != 0
      @report = Report.find params[:id]
    else
      @report = Report.new
      @report.department = 'private'
    end
    @report.category =  params[:type]
    done_works = @report.done_works
    @pricelist = (Division.private.pricelist.with_category(@report.category) + Work.private).uniq
    @top_works = (done_works.map{|i| i.work} + DoneWork.top_works(@report)).uniq
    @pricelist = @top_works + (@pricelist - @top_works)

    render :update do |page|
      page.replace_html  'pricelist_table', :partial => 'pricelist', :collection => @pricelist, :locals =>{:done_works => done_works}
      page.call "getSum"
      page.call "ChangeMaterials"
    end
  end

  def get_preordered
      render :update do |page|
        page.replace_html  'preorders', :partial => 'preorders', :locals =>{:login => params[:login]}
      end
  end

private

def get_reports
  @topologist = (Employee.current_user.accesses.for_department('private').size > 0 && Employee.current_user.accesses.for_department('private').first.access_delete == 1)
  @page_title = 'Сделка - сводная таблица'
  db_name = Rails.configuration.database_configuration[Rails.env]["database"]
  if (params[:filter_month] && params[:filter_month] != '' && params[:filter_year])
    month = params[:filter_month].to_s
    year = params[:filter_year].to_s
  else
    month = Date.today.month.to_s
    year = Date.today.year.to_s
  end
  order = []
  if params[:name_s]
    order << db_name+".reports.name " + params[:name_s]
  end
  if params[:sdate]
    order << db_name+".reports.date " + params[:sdate]
  end
  if params[:ssum]
    order << db_name+".reports.sum " + params[:ssum]
  end
  if params[:sstatus]
    order << db_name+".reports.status " + params[:sstatus]
  end

  if order.empty?
    ord = db_name+'.reports.date,'+db_name+'.reports.name'
  else
    ord = order.join(",")
  end

  @date = (month +'/01/' + year).to_date
  if params[:filter_empl] && params[:filter_empl] != '0'
    empl =  params[:filter_empl]
  else
    empl = ''
  end
  worktype = params[:filter_worktype]
  status = params[:filter_status]
  if @boss || @topologist
    @reports = Report.private.in_month(@date).with_status(status).with_topology_status(params[:topology_map]).with_category(worktype).finn_closed(params[:finn_closed]).without_money(params[:without_money]).find(:all, :order => ord)# , :include => [:done_employees, :done_materials, :done_works] так быстрее    
    @reports = @reports.select{|i| i.done_employees.select{|i| i.empl_id == empl.to_i}.size > 0} if empl != ''
    @wage = 0
  else
    @reports = Report.private.in_month(@date).with_status(status).finn_closed(params[:finn_closed]).with_topology_status(params[:topology_map]).with_category(worktype).without_money(params[:without_money]).find(:all, :order => ord)# , :include => [:done_employees, :done_materials, :done_works]
    @reports = @reports.select{|i| i.done_employees.select{|i| i.empl_id == Employee.current_user.id}.size > 0}
    @wage = Employee.current_user.done_employees.priv.in_month(@date).sum(:sum)
  end

end
  def set_var
    Employee.current_user = Employee.find(session[:user_id]) unless session[:user_id].nil?
    @current_user = Employee.current_user
    if (accesses = Employee.current_user.accesses.for_department('private')).size > 0 
        if accesses.first.access_superuser == 1
          @boss = true
          @superu = true
        else
          @boss = false        
        end
      if accesses.first.access_delete == 1
        @boss_destroyer = true
      else
        @boss_destroyer = false
      end
    else
      @boss = false
      @boss_destroyer = false
    end
  end

  def set_employees
    if params[:show] && (params[:show] == "true" || params[:show] == "checked")
      @employees =   Employee.find(:all, :order =>"login")
    else
      @employees =   Division.private_employees.employees.working
    end

  end



 end


