module GeradorDeEventosContabeisController extend ActiveSupport::Concern

	def disponibiliza_eventos_contabeis
		#@acao_do_sistema = Object.const_get('Contabilidade::' + controller_path.classify).acao_do_sistema
		#@eventos_contabeis = @acao_do_sistema.eventos_contabeis.semi_automatico.where(orcamento_id: contexto_atual.id).order('created_at asc')
	end

	private
	def reconstroi_gerador gerador, atributos
		atributos.except(:status).each { |atributo, valor| gerador.send("#{atributo}=", valor)}
		if atributos[:status]
			gerador.status = atributos[:status].to_i
		end
	end

	def mensagem_de_erro_das_movimentacoes_erradas gerador
		erros = gerador.movimentacoes_do_plano_de_contas.select{|movimentacao| movimentacao.errors[:base].present?}.map{|movimentacao| movimentacao.errors[:base][0]}

		if erros.present?
			mensagem = "Essa ação de #{gerador.class.acao_do_sistema.nome} executa o evento contábil #{gerador.evento_contabil.nome}. Porém, "
			erros.each_with_index { |erro, index|
				mensagem += "E " if index > 0
				mensagem += "a movimentação de #{erro[:tipo_de_lancamento]} na conta #{erro[:conta]} fará com que ela "
				mensagem += "passe de #{erro[:natureza_do_saldo]}a para #{erro[:natureza_do_saldo_virada]}a com uma diferença de saldo, de: #{erro[:saldo].real_contabil}. "
			}
			mensagem += "Verifique se é realmente esse evento que deve ser executado nesse #{gerador.class.model_name.human.downcase}. "
			return mensagem
		end
	end
end
