# -*- coding: utf-8 -*-
class DoneWork < ActiveRecord::Base
  belongs_to :report
  belongs_to :work, :foreign_key => :work_id, :class_name => "Pricelist"
  before_save :set_pricelist

  def self.all_works
 #   @works = DoneWork.find_by_sql("SELECT r.name login, IF(dw.pricelist = 1, pr.name, w.name) name, dw.count count, IF(dw.pricelist = 1, pr.price, w.price) cost, de.nick nick, DATE(r.date) dt  FROM done_works dw LEFT JOIN reports r ON dw.report_id = r.id LEFT JOIN pl_items pr ON dw.work_id = pr.id LEFT JOIN works w ON dw.work_id = w.id LEFT JOIN (SELECT de.empl_name nick, de.report_id FROM done_employees de ORDER BY hand) de ON de.report_id = r.id")

    @works = DoneWork.find_by_sql("SELECT r.name login, IF(dw.pricelist = 1, pr.name, w.name) name, dw.count count, IF(dw.pricelist = 1, pr.price, w.price) cost, de.nick nick, DATE(r.date) dt  FROM done_works dw LEFT JOIN reports r ON dw.report_id = r.id LEFT JOIN pl_items pr ON dw.work_id = pr.id LEFT JOIN works w ON dw.work_id = w.id LEFT JOIN (SELECT de.empl_name nick, de.report_id FROM done_employees de ORDER BY hand) de ON de.report_id = r.id WHERE r.name = 'btul2-936'")

  end


  def work_name
    if self.work
      work.name
    else
      'unknown'
    end
  end

  def work_rate
    if self.work
      work.wage
    else
      'unknown'
    end
  end


  def measure_name
    if self.work
      work.measure_name
    else
      ' шт. '
    end
  end

  def self.top_works(report)    
    # dep = "construction"    
    # date_from = (report.date.blank? ? Date.today : report.date).to_date - 2.month
    # d_to = (report.date.blank? ? Date.today : report.date).to_date
    # if report.category
    #   cat_id = report.category
    # else
    #   cat_id = Category.for_department(report.department).first.id
    # end
    # d_works = DoneWork.find_by_sql(
    #                                "SELECT dw.pricelist, dw.work_id, COUNT(dw.id) as cou 
    #                                  FROM done_works dw 
    #                                     LEFT JOIN reports r ON dw.report_id = r.id 
    #                                          WHERE r.department = '#{dep}' AND r.category = #{cat_id} AND r.client_price_type = #{report.client_price_type} AND dw.date_create_report BETWEEN '#{date_from}' AND '#{d_to}' 
    #                                              GROUP BY pricelist, work_id
    #                                              ORDER BY cou DESC 
    #                                              LIMIT 10")
    return report.done_works.map{|i| i.work}
  end

 def self.top_works_for_mod(report)    
    dep = report.department
    unless report.categor
    date_r = Date.today - 1.month
    d_works = DoneWork.find_by_sql(
                                   "SELECT dw.pricelist, dw.work_id, COUNT(dw.id) as cou 
                                     FROM done_works dw 
                                        LEFT JOIN reports r ON dw.report_id = r.id 
                                             WHERE dw.pricelist = 1 AND r.department = '#{dep}' AND dw.date_create_report BETWEEN '#{date_r.beginning_of_month}' AND '#{date_r.end_of_month}' 
                                                 GROUP BY pricelist, work_id                                                 
                                                  ORDER BY cou DESC 
                                                  LIMIT 10")
    return d_works.map{|i| i.work}


    else
    date_r = (report.date.blank? ? Date.today : report.date).to_date - 1.month
    cat_id = report.category 
    d_works = DoneWork.find_by_sql(
                                   "SELECT dw.pricelist, dw.work_id, COUNT(dw.id) as cou 
                                     FROM done_works dw 
                                        LEFT JOIN reports r ON dw.report_id = r.id 
                                             WHERE dw.pricelist = 1 AND  r.department = '#{dep}' AND r.category = #{cat_id} AND dw.date_create_report BETWEEN '#{date_r.beginning_of_month}' AND '#{date_r.end_of_month}' 
                                                 GROUP BY pricelist, work_id
                                                  ORDER BY cou DESC 
                                                  LIMIT 10")
    return d_works.map{|i| i.work}
  end
  end



  private

  def set_pricelist
    if work.class == Pricelist
      self.pricelist = 1
    end
    self.date_create_report  = report.date if report
    self.department = report.department if report
    self.get_money = 0 if self.get_money.nil?
    if !self.new_record? && self.count.to_i == 0
      self.destroy
    end
  end


end
