class Licitacao::ItemDaSolucao < ApplicationRecord
  has_paper_trail
  
  belongs_to :solucao_do_etp, inverse_of: :itens_da_solucao
  belongs_to :item, class_name: 'Base::Item'
  
  has_many :itens_da_solucao_do_etp_por_unidade_orcamentaria, inverse_of: :item_da_solucao, dependent: :destroy, class_name: 'Licitacao::ItemDaSolucaoDoEtpPorUnidadeOrcamentaria'
  
  validates_presence_of :item_id
  
  accepts_nested_attributes_for :itens_da_solucao_do_etp_por_unidade_orcamentaria, reject_if: :all_blank, allow_destroy: true
  
  validates_associated :itens_da_solucao_do_etp_por_unidade_orcamentaria
  
  validates_presence_of :solucao_do_etp_id
  validates_uniqueness_of :item_id, scope: [:solucao_do_etp_id], if: Proc.new{ self.persisted? }
  
  after_initialize :inicializa_itens_da_solucao_do_etp_por_unidade_orcamentaria, if: :new_record?
  
  self.table_name = 'licitacao_itens_da_solucao'
  
  def codigo_descricao_unidade_orcamentaria_convidadas
    self.itens_da_solucao_do_etp_por_unidade_orcamentaria.map{|item| item.unidade_orcamentaria_por_solucao_do_etp.codigo_descricao_unidade_orcamentaria_convidadas }
  end
  
  def inicializa_itens_da_solucao_do_etp_por_unidade_orcamentaria
		if self.new_record?
			if self.solucao_do_etp && self.itens_da_solucao_do_etp_por_unidade_orcamentaria.empty?
				unidade_por_solucao_do_etp = solucao_do_etp.unidades_orcamentarias_por_solucao_do_etp.find_by(unidade_orcamentaria_id: self.solucao_do_etp.etp.unidade_orcamentaria.id)
				self.itens_da_solucao_do_etp_por_unidade_orcamentaria.build(unidade_orcamentaria_por_solucao_do_etp_id: unidade_por_solucao_do_etp.id) unless unidade_por_solucao_do_etp.nil?
			end
		end
	end
  
  def quantidade_por_unidade_orcamentaria
		itens_da_solucao_do_etp_por_unidade_orcamentaria.sum(:quantidade).to_f
	end
end