class Loa::Relatorios::DemonstrativoDoResultadoPrimario


	def self.dados orcamento
		dados_das_receitas = Array.new
		total_impostos = 0
		total_contribuicoes = 0
		total_deducoes = 0
		total_irrf = 0
		total_outros_impostos = 0

		# receitas 11
		receitas_rcl_impostos = ['0011180110000000','0011180230000000','0011180140000000']
		receitas_irrf = ['0011130300000000']
		receitas_outros_impostos = ['0011190111000000','0011200000000000','0011300000000000']

		total_irrf = orcamento.naturezas_da_receita.where("codigo in (?)", receitas_irrf).to_a.sum(&:total_previsto_agregado)
		total_impostos = orcamento.naturezas_da_receita.where("codigo in (?)", receitas_rcl_impostos).to_a.sum(&:total_previsto_agregado)
		total_rcl_impostos = orcamento.naturezas_da_receita.where("origem = '1' and categoria_economica = '001' and especie = '0'").to_a.sum(&:total_previsto_agregado)
		total_outros_impostos = orcamento.naturezas_da_receita.where("codigo in (?)", receitas_outros_impostos).to_a.sum(&:total_previsto_agregado)

		total_receitas_correntes = orcamento.naturezas_da_receita.where("origem = '0' and categoria_economica = '001'").to_a.sum(&:total_previsto_agregado)
		sumario = {}
		sumario['descricao'] = 'RECEITAS CORRENTES (I)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_receitas_correntes
		dados_das_receitas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'Impostos, Taxas e Contribuições de Melhoria'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_rcl_impostos
		dados_das_receitas.push(sumario)

		orcamento.naturezas_da_receita.where("codigo in (?)", receitas_rcl_impostos).order(:codigo).each do |receita|
			sumario = {}
			sumario['descricao'] = receita.descricao_e_sigla
			sumario['valor'] = receita.total_previsto_agregado
			sumario['estilo'] = 'tabulacao_2'
			dados_das_receitas.push(sumario)
		end

		sumario = {}
		sumario['descricao'] = 'IRRF'
		sumario['valor'] = total_irrf
		sumario['estilo'] = 'tabulacao_2'
		dados_das_receitas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'Outros Impostos, Taxas e Contribuições de Melhoria'
		sumario['valor'] = total_outros_impostos
		sumario['estilo'] = 'tabulacao_2'
		dados_das_receitas.push(sumario)

		# receitas 12
		total_contribuicoes = orcamento.naturezas_da_receita.where("origem = '2' and categoria_economica = '001' and especie = '0'").to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'Contribuições'
		sumario['valor'] = total_contribuicoes
		sumario['estilo'] = 'tabulacao_1'
		dados_das_receitas.push(sumario)

		# receitas 13
		total_patrimonial = orcamento.naturezas_da_receita.where("origem = '3' and categoria_economica = '001' and especie = '0'").to_a.sum(&:total_previsto_agregado)
		total_outras_receitas_patrimoniais = total_patrimonial

		sumario = {}
		sumario['descricao'] = 'Rendimento Patrimonial'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_patrimonial
		dados_das_receitas.push(sumario)

		receita_rcl_patrimonial = orcamento.naturezas_da_receita.find_by(codigo: '0013210000000000')

		sumario = {}
		sumario['descricao'] = 'Aplicações Financeiras(II)'
		sumario['valor'] = receita_rcl_patrimonial.total_previsto_agregado
		sumario['estilo'] = 'tabulacao_2'
		dados_das_receitas.push(sumario)


		sumario = {}
		sumario['descricao'] = 'Outras Receitas Patrimoniais'
		sumario['estilo'] = 'tabulacao_2'
		sumario['valor'] = total_outras_receitas_patrimoniais.to_f - receita_rcl_patrimonial.total_previsto_agregado.to_f
		dados_das_receitas.push(sumario)

		# receita 17

		total_transferencias = orcamento.naturezas_da_receita.where("origem = '7' and categoria_economica = '001' and especie = '0'").to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'Transferências Correntes'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_transferencias
		dados_das_receitas.push(sumario)

		total_receitas_fpm = orcamento.naturezas_da_receita.where(codigo: ["0017280110000000", "0017280120000000", "0017180150000000", "0017180610000000", "0017280130000000", "0017580100000000"]).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = "Cota-Parte do FPM"
		sumario['estilo'] = 'tabulacao_2'
		sumario['valor'] = total_receitas_fpm
		dados_das_receitas.push(sumario)

		receitas_de_outras_transferencias = ["0017280111000000", "0017280121000000", "0017180151000000", "0017180611000000", "0017280131000000", "0017580100000000"]
		total_receitas_de_outras_transferencias = orcamento.naturezas_da_receita.where(codigo: receitas_de_outras_transferencias).to_a.sum(&:total_previsto_agregado)

		orcamento.naturezas_da_receita.where("codigo in (?)", receitas_de_outras_transferencias).order(:codigo).each do |receita|
				sumario = {}
				sumario['descricao'] = receita.descricao_e_sigla
				sumario['estilo'] = 'tabulacao_2'
				sumario['valor'] = receita.total_previsto_agregado
				dados_das_receitas.push(sumario)
		end


		sumario = {}
		sumario['descricao'] = "Outras transferências Correntes"
		sumario['estilo'] = 'tabulacao_2'
		sumario['valor'] = total_transferencias - total_receitas_fpm - total_receitas_de_outras_transferencias
		dados_das_receitas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'Demais Receitas Correntes'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_receitas_correntes.to_f - total_transferencias.to_f
		dados_das_receitas.push(sumario)

		total_receitas_financeiras = orcamento.naturezas_da_receita.where(tipo_de_receita: "financeira").to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'Outras Receitas Financeiras (III)'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_receitas_financeiras
		dados_das_receitas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'Receitas Correntes Restantes'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_receitas_correntes.to_f - total_transferencias.to_f - total_contribuicoes.to_f - total_patrimonial.to_f
		dados_das_receitas.push(sumario)


		receitas_de_deducao = ['0012100420000000', 'falta essa', '0017580110000000']

		total_deducoes = orcamento.naturezas_da_receita.where(codigo: receitas_de_deducao).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'RECEITAS PRIMÁRIAS CORRENTES (IV) = (I - II - III)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_receitas_financeiras.to_f - total_receitas_correntes.to_f - receita_rcl_patrimonial.total_previsto_agregado.to_f
		dados_das_receitas.push(sumario)

		total_receitas_de_capital = orcamento.naturezas_da_receita.where("origem = '0' and categoria_economica = '002'").to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'RECEITAS DE CAPITAL (V)'
		sumario['valor'] = total_receitas_de_capital
		sumario['estilo'] = 'negrito'
		dados_das_receitas.push(sumario)

		total_operacoes_de_credito = 	orcamento.naturezas_da_receita.where(codigo: '0021000000000000').order(:codigo).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = "Operações de Crédito (VI)"
		sumario['valor'] = total_operacoes_de_credito
		sumario['estilo'] = 'tabulacao_1'
		dados_das_receitas.push(sumario)

		total_amortizacao_de_emprestimos = 	orcamento.naturezas_da_receita.where(codigo: '0023000000000000').order(:codigo).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = "Amortização de Empréstimos (VII)"
		sumario['valor'] = total_amortizacao_de_emprestimos
		sumario['estilo'] = 'tabulacao_1'
		dados_das_receitas.push(sumario)

		total_alienacao_de_bens = 0
		alienacao_de_bens = ['0022000000000000']

		orcamento.naturezas_da_receita.where("codigo in (?)", alienacao_de_bens).order(:codigo).each do |receita|
				total_alienacao_de_bens += receita.total_previsto_agregado
				sumario = {}
				sumario['descricao'] = "Alienação de Bens"
				sumario['valor'] = receita.total_previsto_agregado
				sumario['estilo'] = 'tabulacao_1'
				dados_das_receitas.push(sumario)
		end


		total_transferencias_de_capital = 0
		transferencias_de_capital = ['0024000000000000']
		total_transferencias_de_capital =  orcamento.naturezas_da_receita.where("codigo in (?)", transferencias_de_capital).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = ' Transferências de Capital'
		sumario['valor'] = total_transferencias_de_capital
		sumario['estilo'] = 'tabulacao_1'
		dados_das_receitas.push(sumario)

		receitas_convenios = ['0024181000000000','0024281000000000']
		total_convenios = orcamento.naturezas_da_receita.where("codigo in (?)", receitas_convenios).to_a.sum(&:total_previsto_agregado)

		sumario = {}
		sumario['descricao'] = 'Convênios'
		sumario['estilo'] = 'tabulacao_2'
		sumario['valor'] = total_convenios
		dados_das_receitas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'Outras Transferências de Capital'
		sumario['estilo'] = 'tabulacao_2'
		sumario['valor'] = total_transferencias_de_capital - total_convenios
		dados_das_receitas.push(sumario)


		sumario = {}
		sumario['descricao'] = 'Outras Receitas de Capital'
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = total_receitas_de_capital - total_amortizacao_de_emprestimos - total_operacoes_de_credito
		dados_das_receitas.push(sumario)

		total_receitas_primarias_de_capital = total_receitas_de_capital - total_operacoes_de_credito - total_alienacao_de_bens - total_amortizacao_de_emprestimos
		sumario = {}
		sumario['descricao'] = 'RECEITAS PRIMÁRIAS DE CAPITAL (XI) = (V - VI - VII - VIII - IX - X)'
		sumario['valor'] = total_receitas_primarias_de_capital
		sumario['estilo'] = 'negrito'
		dados_das_receitas.push(sumario)

		receita_primaria_total = total_receitas_correntes + total_receitas_primarias_de_capital
		sumario = {}
		sumario['descricao'] = 'RECEITA PRIMÁRIA TOTAL (XII) = (IV + XI)'
		sumario['valor'] = receita_primaria_total
		sumario['estilo'] = 'negrito'
		dados_das_receitas.push(sumario)

		dados_das_despesas = Array.new

		total_despesas_correntes = orcamento.categorias_economicas.where("base_categorias_economicas.codigo = '30000000'").first
		sumario = {}
		sumario['descricao'] = 'DESPESAS CORRENTES (XIII)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_despesas_correntes.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		pessoal_e_encargos = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '31000000'").first
		sumario = {}
		sumario['descricao'] = pessoal_e_encargos.try(:descricao)
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = pessoal_e_encargos.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		juros_e_encargos_da_divida = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '32000000'").first
		sumario = {}
		sumario['descricao'] = juros_e_encargos_da_divida.try(:descricao) + " (XIV)"
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = juros_e_encargos_da_divida.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		outras_despesas_correntes = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '33000000'").first
		sumario = {}
		sumario['descricao'] = outras_despesas_correntes.try(:descricao)
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = outras_despesas_correntes.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		total_despesas_primarias_correntes = total_despesas_correntes.try(:valor_total).to_f - juros_e_encargos_da_divida.try(:valor_total).to_f
		sumario = {}
		sumario['descricao'] = 'DESPESAS PRIMÁRIAS CORRENTES (X) = (VIII - IX)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_despesas_primarias_correntes
		dados_das_despesas.push(sumario)

		total_despesas_de_capital = orcamento.categorias_economicas.where("base_categorias_economicas.codigo = '40000000'").first
		sumario = {}
		sumario['descricao'] = 'DESPESAS DE CAPITAL (XVI)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_despesas_de_capital.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		investimentos = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '44000000'").first
		sumario = {}
		sumario['descricao'] = investimentos.try(:descricao)
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = investimentos.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		inversoes_financeiras = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '45000000'").first
		sumario = {}
		sumario['descricao'] = inversoes_financeiras.try(:descricao)
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = inversoes_financeiras.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

			concessao_de_emprestimos = orcamento.grupos_de_natureza_da_despesa.where("substring(base_grupos_de_natureza_da_despesa.codigo from 1 for 2) = '45' and substring(base_grupos_de_natureza_da_despesa.codigo from 5 for 2) = '66'").all
			sumario = {}
			sumario['descricao'] = "Concessão de empréstimos (XII)"
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = concessao_de_emprestimos.to_a.sum(&:valor_total)
			dados_das_despesas.push(sumario)

			aquisicao_de_titulos = orcamento.grupos_de_natureza_da_despesa.where("substring(base_grupos_de_natureza_da_despesa.codigo from 1 for 2) = '45' and substring(base_grupos_de_natureza_da_despesa.codigo from 5 for 2) = '64'").all
			sumario = {}
			sumario['descricao'] = "Aquisição de título de capital já integralizado (XVIII)"
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = aquisicao_de_titulos.to_a.sum(&:valor_total)
			dados_das_despesas.push(sumario)

			titulos_de_credito = orcamento.grupos_de_natureza_da_despesa.where("substring(base_grupos_de_natureza_da_despesa.codigo from 1 for 2) = '45' and substring(base_grupos_de_natureza_da_despesa.codigo from 5 for 2) = '63'").all
			sumario = {}
			sumario['descricao'] = "Aquisição de Título de Crédito (XIX)"
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = titulos_de_credito.to_a.sum(&:valor_total)
			dados_das_despesas.push(sumario)

			sumario = {}
			sumario['descricao'] = "Demais inversões financeiras"
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = inversoes_financeiras.try(:valor_total).to_f - concessao_de_emprestimos.try(:valor_total).to_f - aquisicao_de_titulos.try(:valor_total).to_f - titulos_de_credito.to_a.sum(&:valor_total).to_f
			dados_das_despesas.push(sumario)

		amortizacao_da_divida = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '46000000'").first
		sumario = {}
		sumario['descricao'] = amortizacao_da_divida.try(:descricao) + " (XX)"
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = amortizacao_da_divida.try(:valor_total).to_f
		dados_das_despesas.push(sumario)

		total_despesas_primarias_de_capital = total_despesas_de_capital.try(:valor_total).to_f - concessao_de_emprestimos.to_a.sum(&:valor_total) - aquisicao_de_titulos.to_a.sum(&:valor_total) - amortizacao_da_divida.try(:valor_total).to_f
		sumario = {}
		sumario['descricao'] = 'DESPESAS PRIMÁRIAS DE CAPITAL (XXI) = (XVI - XVII - XVIII - XIX - XX)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = total_despesas_primarias_de_capital
		dados_das_despesas.push(sumario)

		reserva_de_contigencia = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '99000000'").first
		subfuncao_reserva_de_contigencia = orcamento.subfuncoes.find_by(codigo: '999')
		sumario = {}
		sumario['descricao'] = "Reserva de Contigência (XXII)"
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = reserva_de_contigencia.try(:valor_total_por_subfuncao, subfuncao_reserva_de_contigencia).to_f
		dados_das_despesas.push(sumario)

		reserva_do_rpps = orcamento.grupos_de_natureza_da_despesa.where("base_grupos_de_natureza_da_despesa.codigo = '97000000'").first
		subfuncao_rpps = orcamento.subfuncoes.find_by(codigo: '997')
		sumario = {}
		sumario['descricao'] = "Reserva do RPPS (XXII)"
		sumario['estilo'] = 'tabulacao_1'
		sumario['valor'] = reserva_do_rpps.try(:valor_total_por_subfuncao, subfuncao_rpps).to_f
		dados_das_despesas.push(sumario)

		despesa_primaria_total = total_despesas_primarias_correntes + total_despesas_primarias_de_capital + reserva_de_contigencia.try(:valor_total).to_f
		sumario['descricao'] = 'DESPESAS PRIMÁRIA TOTAL (XIX) = (XV + XXI + XXII)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = despesa_primaria_total
		dados_das_despesas.push(sumario)

		sumario = {}
		sumario['descricao'] = 'RESULTADO PRIMÁRIO (XXIV) = (VII - XVIII)'
		sumario['estilo'] = 'negrito'
		sumario['valor'] = receita_primaria_total - despesa_primaria_total
		dados_das_despesas.push(sumario)

		return {receitas: dados_das_receitas, despesas: dados_das_despesas}
	end

end
