require 'active_support/concern'

module SeedUnidadesDasContasBancarias extend ActiveSupport::Concern
	def vincula_unidades_nas_contas_bancarias
		exercicio_anterior = self.exercicio.to_f - 1
		orcamento_anterior = Orcamento.find_by(exercicio: exercicio_anterior)

		if orcamento_anterior.present?
			Base::ContaBancaria.all.each do |conta_bancaria|
				contas_do_exercico_anterior =  conta_bancaria.contas_bancarias_por_unidade_orcamentaria.joins(unidade_orcamentaria: :orgao).where('loa_orgaos.orcamento_id =?', orcamento_anterior.id)

				if contas_do_exercico_anterior.any?
					contas_do_exercico_anterior.each do |conta_por_unidade|
						cod_orgao = conta_por_unidade.unidade_orcamentaria.orgao.codigo
						cod_unidade = conta_por_unidade.unidade_orcamentaria.codigo

						unidade_nova = Loa::UnidadeOrcamentaria.joins(:orgao).find_by(codigo: cod_unidade, loa_orgaos: {codigo: cod_orgao, orcamento_id: self.id})

						if unidade_nova.blank?
							unidade_nova = self.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).find_by('loa_unidades_orcamentaria_vinculada.unidade_orcamentaria_vinculada_id = ?', conta_por_unidade.unidade_orcamentaria_id)
						end

						if unidade_nova.present? && conta_bancaria.contas_bancarias_por_unidade_orcamentaria.find_by(unidade_orcamentaria_id: unidade_nova.id).blank?
							conta_por_unidade_nova = conta_bancaria.contas_bancarias_por_unidade_orcamentaria.create(unidade_orcamentaria_id: unidade_nova.id, conta_bancaria_id: conta_bancaria.id, saldo_atual: conta_por_unidade.saldo_atual)
						end
					end
				end
			end
		end
	end
end
