# -*- coding: utf-8 -*-
class Pricelist < ActiveRecord::Base
  establish_connection :pricelist
  set_table_name :pl_items
#  default_scope :include => :section, :conditions => {"pl_items.hidden" => "N", "pl_sections.hidden" => "N"}, :order => 'pl_sections.ordered'
#  default_scope :include => :section, :conditions => {"pl_sections.hidden" => "N"}, :order => 'pl_sections.ordered'
  default_scope :include => :section, :order => 'pl_sections.ordered, pl_sections.id'
  belongs_to :section
  belongs_to :measure
  belongs_to :legal_entity

  has_many :pricelist_divisions, :foreign_key => 'item_id', :dependent => :destroy
  accepts_nested_attributes_for :pricelist_divisions, :reject_if =>  proc {|a| a['division_id'].nil? ||  a['division_id'].blank?}, :allow_destroy => true
  has_many :divisions, :through => :pricelist_divisions

  #  attr_reader :description, :measure, :step_button, :department,  :created_at, :updated_at, :sort, :show, :addrate, :category
#  named_scope :with_section, lambda { |section| section.present? ? { :conditions => ['pl_item_divisions.section_id = ?', section], :include => :pricelist_divisions}: {}}
#  named_scope :with_division,  lambda { |division| division.present? ? { :conditions => [ 'pl_sections.hidden = "N" AND  pl_items.hidden = "N" AND pl_item_divisions.division_id = ? ' , division], :include => ["pricelist_divisions", "section"] }: {} }
  named_scope :with_division,  lambda { |division| division.present? ? { :conditions => [ 'pl_items.hidden = "N" AND pl_item_divisions.division_id = ? ' , division], :include => ["pricelist_divisions"] }: {} }
  named_scope :commertial, :include => :section, :conditions => "pl_items.hidden = 'N' AND client_type IN ('C', 'A')"
  named_scope :personnel, :include => :section, :conditions => "pl_items.hidden = 'N' AND client_type IN ('P', 'A')"
  named_scope :with_category, lambda { |cat| cat.present? ? { :conditions => [ "pl_item_divisions.category LIKE ('%?%') ", cat], :include => :pricelist_divisions }: {} }

  named_scope :with_section, lambda { |section| section.present? ? { :conditions => ['pl_items.section_id = ?', section] }: {} }
  named_scope :active_hidden, lambda { |act| act.present? ? { :conditions => ['pl_items.hidden = ?', act] }: {} }
  named_scope :with_legal_entity, lambda { |le| le.present? ? { :conditions => ['pl_items.legal_entity_id = ?', le] }: {} }
 
  before_save :set_usr

    def client_type_name
    case client_type
      when 'P'
      'Частный'
      when 'C'
      'Корпоративный'
      when 'A'
      'Любой'
      end
  end


  def is_display?
    case hidden
      when 'N'
      'Отображается'
      when 'Y'
      'Скрытый'
      else
      'Неизвестно'
      end
  end


  def legal_entity_code
    if legal_entity
      legal_entity.code
    else
      ''
    end
  end

  def self.add_to_soft_private_price
    usr = (Employee.find_by_login 'annet17').id
    date_start = Date.today - 6.months
    section = Section.find 252
    division = Division.soft
    n = 1
    for w in Work.private do
      p = Pricelist.create(:name => w.name, :client_type => "P", :price => w.price.to_f, :rate => w.rate.to_f, :date_start => date_start, :measure => w.measure, :position_type => 'U', :section => section, :usr => usr, :hidden => 'N', :ordered => n)
      n += 1
      p.pricelist_divisions.create(:division =>division, :date_start => date_start, :category => "53,54")
    end
    for old_price in Division.soft.pricelist.with_category(24) do
      pd = old_price.pricelist_divisions.select{|i| i.division_id == 251}.first
      pd.category += ",53,54"
      pd.save
    end
  end

  def full_name
    section.name + ": " + name
  end

  def description
    ''
  end


  def measure_name
    if measure
      measure.name
    else
      " шт. "
      end
  end



  def free
    false
  end

  def wage
    if rate
      rate.to_f.round(2)
    else
      (price/2).to_f
    end

  end


  def section_name
    if section
      section.name
    else
      ''
    end
  end

  def department_name
    divs = []
    for div in divisions do
      divs << div.name
    end
    return divs.join(", ")
  end
  
  def depts
    divs_names = []
    divs = divisions.map{|i| i.id}.uniq
    for div in divs do
      case div
      when 152
        divs_names << 'private'
      when 251
        divs_names << 'soft'
      when 155
        divs_names << 'corp'
      when 151
        divs_names << 'ams'
      end
    end
    return divs_names
  end

  private
  
  def set_usr
    self.usr = Employee.current_user.id if Employee.current_user
    self.ordered ||= Pricelist.last.id+1    
  end


end
