class Loa::Relatorios::DespesaComPessoalSobreRcl

	def self.dados orcamento
			dados = {}
			deducoes_executivo = []
			totais_executivo = []
			deducoes_legislativo = []
			totais_legislativo = []

			unidades_orcamentarias_executivo = orcamento.unidades_orcamentarias.joins(orgao: :tipo_de_unidade_administrativa).where('base_tipos_de_unidades_administrativas.codigo != ?', '02' )
			unidades_orcamentarias_legislativo = orcamento.unidades_orcamentarias.joins(orgao: :tipo_de_unidade_administrativa).where('base_tipos_de_unidades_administrativas.codigo = ?', '02' )
			
			#DESPESAS DE PESSOAL
			total_pessoal_ativo_legislativo = 0
			total_pessoal_inativo_legislativo = 0
			total_outras_despesas_legislativo = 0
			
			elemtnos_despesa_bruta_legislativo = ['31900400', '31901100', '31901300', '31901600', '31909100', '31909200', '31909400', '31909600', '31911300']
			extra_despesa_legislativo = ['31900100', '31900400', '31910400', '31909100', '31919100', '31909200', '31919200', '31909400', '31919400', '33903400']
			pessoal_ativo_codigos = ['31901100','31900400','31901300','31911300, 31900800']
			pessoal_inativo_e_pensionista_codigos = ['31900100','31900300']
			outras_despesas_de_pessoal_codigos = ['33903400']
			aposentadorias_legislativo = ['31900100']
			pensoes_legislativo = ['31900300']
			
			despesa_bruta_legislativo = 0
			despesas_extra_legislativo = 0
			total_aposentadorias_legislativo = 0
			total_pensoes_legislativo = 0
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', elemtnos_despesa_bruta_legislativo).each do |ativo|
				despesa_bruta_legislativo += ativo.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', pessoal_ativo_codigos).each do |ativo|
				total_pessoal_ativo_legislativo += ativo.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', pessoal_inativo_e_pensionista_codigos).each do |inativo|
				total_pessoal_inativo_legislativo += inativo.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', outras_despesas_de_pessoal_codigos).each do |outro|
				total_outras_despesas_legislativo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', extra_despesa_legislativo).each do |outro|
				despesas_extra_legislativo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', aposentadorias_legislativo).each do |outro|
				total_aposentadorias_legislativo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', pensoes_legislativo).each do |outro|
				total_pensoes_legislativo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end
			
			# despesa_bruta_legislativo = total_pessoal_ativo_legislativo + total_pessoal_inativo_legislativo + total_outras_despesas_legislativo + total_aposentadorias_legislativo + total_pensoes_legislativo + total_outras_despesas_legislativo

			elementos_despesa_bruta_executivo = ['31717000', '31900100', '31900300', '31900400', '31901100', '31901300', '31901600', '31909100', '31909200', '31909400', '31909600', '31911300', '31919200', '33903400']
			extra_despesa_bruta = ['31900100', '31900400', '31910400', '31909100', '31919100', '31909200', '31919200', '31909400', '31919400']
			vencimentos_e_vantangens = ['31901100']
			obrigacoes_patromoniais_elementos = ['31901300', '31911300']
			beneficios_previdenciarios = ['31900800']
			aposentadorias_executivo = ['31900100']
			pensoes_executivo = ['31900300']
			
		
			despesa_bruta_executivo = 0
			despesas_extra_executivo = 0
			total_vencimentos_vantagens = 0
			obrigacoes_patromoniais = 0
			total_beneficios_previdenciarios = 0
			total_aposentadorias_executivo = 0
			total_pensoes_executivo = 0
			total_outras_despesas_executivo = 0
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', elementos_despesa_bruta_executivo).each do |outro|
				despesa_bruta_executivo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', outras_despesas_de_pessoal_codigos).each do |outro|
				total_outras_despesas_executivo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', vencimentos_e_vantangens).each do |outro|
				total_vencimentos_vantagens += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', obrigacoes_patromoniais_elementos).each do |outro|
				obrigacoes_patromoniais += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', extra_despesa_bruta).each do |outro|
				despesas_extra_executivo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', beneficios_previdenciarios).each do |outro|
				total_beneficios_previdenciarios += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', aposentadorias_executivo).each do |outro|
				total_aposentadorias_executivo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', pensoes_executivo).each do |outro|
				total_pensoes_executivo += outro.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end
			
			# despesa_bruta_executivo = total_vencimentos_vantagens + obrigacoes_patromoniais + total_beneficios_previdenciarios + total_aposentadorias_executivo + total_pensoes_executivo + total_outras_despesas_executivo
			
			sumario = {}
			sumario['descricao'] = 'Despesa Bruta com Pessoal(I)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_bruta_executivo
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Pessoal Ativo'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_vencimentos_vantagens + obrigacoes_patromoniais + total_beneficios_previdenciarios
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Vencimentos, Vantagens e Outras Despesas Variáveis'
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = total_vencimentos_vantagens
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Obrigações Patronais'
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = obrigacoes_patromoniais
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Benefícios Previdenciários'
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = total_beneficios_previdenciarios
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Pessoal Inativo e Pensionista'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_aposentadorias_executivo + total_pensoes_executivo
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Aposentadorias, Reserva e Reformas'
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = total_aposentadorias_executivo
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Pensões'
			sumario['estilo'] = 'tabulacao_2'
			sumario['valor'] = total_pensoes_executivo
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Outras Despesas de Pessoal Decorrente a Contratação de Terceirização'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_outras_despesas_executivo
			deducoes_executivo.push(sumario)

			#DESPESAS NÃO COMPUTADAS
			total_indenizacao = 0
			total_decisao_judicial = 0
			total_despesas_anteriores = 0
			total_inativos_vinculados = 0
			total_indenizacao_legislativo = 0
			total_decisao_judicial_legislativo = 0
			total_despesas_anteriores_legislativo = 0
			total_inativos_vinculados_legislativo = 0

			indenizacao_codigos = ['31909400', '31919400']
			decisao_judicial_codigos = ['31909100', '31919100']
			despesas_anteriores_codigos = ['31909200', '31919200']
			inativos_vinculados_codigos = ['31900100', '31900300', '31900800']
			fontes_vinculados = ['04', '05','06']

			#Calculos Executivo
			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', indenizacao_codigos).each do |indenizacao|
					total_indenizacao += indenizacao.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', decisao_judicial_codigos).each do |decisao|
					total_decisao_judicial += decisao.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', despesas_anteriores_codigos).each do |despesa|
					total_despesas_anteriores += despesa.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', inativos_vinculados_codigos).each do |inativo|
					total_inativos_vinculados += inativo.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_executivo)
			end

			total_nao_computada = total_indenizacao + total_decisao_judicial + total_despesas_anteriores + total_inativos_vinculados

			#Calculos Legislativo

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', indenizacao_codigos).each do |indenizacao|
					total_indenizacao_legislativo += indenizacao.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', decisao_judicial_codigos).each do |decisao|
					total_decisao_judicial_legislativo += decisao.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', despesas_anteriores_codigos).each do |despesa|
					total_despesas_anteriores_legislativo += despesa.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			orcamento.elementos_de_despesa.where('base_elementos_de_despesa.codigo in (?)', inativos_vinculados_codigos).each do |inativo|
					total_inativos_vinculados_legislativo += inativo.total_previsto_por_unidades_orcamentarias(unidades_orcamentarias_legislativo)
			end

			total_nao_computada_legislativo = total_indenizacao_legislativo + total_decisao_judicial_legislativo + total_despesas_anteriores_legislativo + total_inativos_vinculados_legislativo


			sumario = {}
			sumario['descricao'] = 'Despesa Não Computada (II)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = total_nao_computada
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Indenização por demissão e incentivo à demissão voluntária'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_indenizacao.to_f
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Decorrentes de Decisão Judicial de Periodo Anterior ao da Apuração'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_decisao_judicial.to_f
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Despesas de Exercicios Anteriores do Periodo Anterior ao da Apuração'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_despesas_anteriores.to_f
			deducoes_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Inativos e Pensionistas com Recursos Vinculados'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_inativos_vinculados.to_f
			deducoes_executivo.push(sumario)

			despesa_liquida = despesa_bruta_executivo - total_nao_computada
			
			sumario = {}
			sumario['descricao'] = 'Despesa Liquída com Pessoal (III = I - II)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_liquida
			deducoes_executivo.push(sumario)
			
			
			contribuicao_servidor_previdencia = ['0012150100000000', '0012150200000000', '0012150300000000', '0012155000000000', '0012155100000000']
			compensacao_financeira_previdencia = ['0019990300000000']
			rendimento_aplicacoes_previdencia = ['0013210400000000']
			deducao_receitas_fundeb = ['0095000000000000']
			
			total_contribuicao_servidor_previdencia = -orcamento.naturezas_da_receita.where('codigo in (?)', contribuicao_servidor_previdencia).to_a.sum(&:total_previsto_agregado)
			total_compensacao_financeira_previdencia = -orcamento.naturezas_da_receita.where('codigo in (?)', compensacao_financeira_previdencia).to_a.sum(&:total_previsto_agregado)
			total_rendimento_aplicacoes_previdencia = -orcamento.naturezas_da_receita.where('codigo in (?)', rendimento_aplicacoes_previdencia).to_a.sum(&:total_previsto_agregado)
			total_deducao_receitas_fundeb = orcamento.naturezas_da_receita.where('codigo in (?)', deducao_receitas_fundeb).to_a.sum(&:total_previsto_agregado)
			total_deducoes = total_contribuicao_servidor_previdencia + total_compensacao_financeira_previdencia + total_rendimento_aplicacoes_previdencia + total_deducao_receitas_fundeb
			
			#Dados Segunda Tabela Executivo
			sumario = {}
			sumario['descricao'] = 'Receita Corrente Liquida - RCL (IV)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = orcamento.valor_total_da_receita_corrente_liquida + total_deducoes
			sumario['percentual'] = '100.00'
			totais_executivo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Despesa Total com o pessoal (V = III)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_liquida
			sumario['percentual'] = (despesa_liquida.to_f / (orcamento.valor_total_da_receita_corrente_liquida + total_deducoes)) * 100
			totais_executivo.push(sumario)

			# limite_maximo = orcamento.valor_total_da_receita_corrente_liquida.to_f * (orcamento.percentual_despesa_com_pessoal.to_f / 100)
			
			# sumario = {}
			# sumario['descricao'] = 'Limite Máximo (VI)'
			# sumario['estilo'] = 'negrito'
			# sumario['valor'] =  limite_maximo
			# sumario['percentual'] = orcamento.percentual_despesa_com_pessoal
			# totais_executivo.push(sumario)

			# sumario = {}
			# sumario['descricao'] = 'Limite Prudencial (VII = 0,95 X VI)'
			# sumario['estilo'] = 'negrito'
			# sumario['valor'] = 0.51 * limite_maximo.to_f
			# sumario['percentual'] = 51.30
			# totais_executivo.push(sumario)

			# sumario = {}
			# sumario['descricao'] = 'Limite de Alerta (VIII = 0,90 X VI)'
			# sumario['estilo'] = 'negrito'
			# sumario['valor'] = 0.48 * limite_maximo.to_f
			# sumario['percentual'] = 48.6
			# totais_executivo.push(sumario)

			#Tabela Legislativo
			sumario = {}
			sumario['descricao'] = 'Despesa Bruta com Pessoal(I)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_bruta_legislativo
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Pessoal Ativo'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_pessoal_ativo_legislativo.to_f
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Pesssoal Inativo e Pensionista'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_pessoal_inativo_legislativo
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Outras Despesas de Pessoal Decorrente a Contratação de Terceirização'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_outras_despesas_legislativo
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Despesa Não Computada (II)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = total_nao_computada_legislativo
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Indenização por demissão e incentivo à demissão voluntária'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_indenizacao_legislativo.to_f
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Decorrentes de Decisão Judicial de Periodo Anterior ao da Apuração'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_decisao_judicial_legislativo.to_f
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Despesas de Exercicios Anteriores do Periodo Anterior ao da Apuração'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_despesas_anteriores_legislativo.to_f
			deducoes_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Inativos e Pensionistas com Recursos Vinculados'
			sumario['estilo'] = 'tabulacao_1'
			sumario['valor'] = total_inativos_vinculados_legislativo.to_f
			deducoes_legislativo.push(sumario)

			despesa_liquida_legislativo = despesa_bruta_legislativo - total_nao_computada_legislativo
			
			sumario = {}
			sumario['descricao'] = 'Despesa Liquída com Pessoal (III = I - II)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_liquida_legislativo
			deducoes_legislativo.push(sumario)

			#Dados Segunda Tabela Legislativo
			sumario = {}
			sumario['descricao'] = 'Receita Corrente Liquida - RCL (IV)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = orcamento.valor_total_da_receita_corrente_liquida + total_deducoes
			sumario['percentual'] = '100'
			totais_legislativo.push(sumario)

			sumario = {}
			sumario['descricao'] = 'Despesa Total com o pessoal (V = III)'
			sumario['estilo'] = 'negrito'
			sumario['valor'] = despesa_liquida_legislativo
			sumario['percentual'] = (despesa_liquida_legislativo.to_f / (orcamento.valor_total_da_receita_corrente_liquida + total_deducoes)) * 100
			totais_legislativo.push(sumario)

			# limite_maximo_legislativo = orcamento.valor_total_da_receita_corrente_liquida.to_f * 0.06
			# sumario = {}
			# sumario['descricao'] = 'Limite Máximo (VI)'
			# sumario['estilo'] = 'negrito'
			# sumario['valor'] =  limite_maximo_legislativo
			# sumario['percentual'] =  6
			# totais_legislativo.push(sumario)

			dados[:deducoes_executivo] = deducoes_executivo
			dados[:totais_executivo] = totais_executivo
			dados[:deducoes_legislativo] = deducoes_legislativo
			dados[:totais_legislativo] = totais_legislativo



			return dados

	end
end
