class Patrimonio::RelatoriosDoPatrimonioController < ApplicationController
	include ControllerConcern

	skip_before_action :verifica_se_tem_orcamento_na_sessao!, only: [:new, :imprimir], raise: false
	before_action :authenticate_usuario!
	before_action :autoriza_usuario! , except: [:new, :imprimir]
	before_action :disponibiliza_dependencias
	before_action :disponibiliza_dependencias_formulario, only: [:selecionar_relatorio]

	def new
		@relatorio_do_patrimonio = Tableless::RelatorioDoPatrimonio.new(relatorio: params[:relatorio])
		disponibiliza_dependencias_formulario
	end

	# seleciona um relatório para imprimir
	def selecionar_relatorio
		@relatorio_do_patrimonio = Tableless::RelatorioDoPatrimonio.new()
	end

	def imprimir
		@relatorio_do_patrimonio = Tableless::RelatorioDoPatrimonio.new(tableless_relatorio_do_patrimonio_params)

		if(tableless_relatorio_do_patrimonio_params[:button].eql?("pdf"))
			imprimir_em_pdf( @relatorio_do_patrimonio )
		elsif(tableless_relatorio_do_patrimonio_params[:button].eql?("planilha"))
			planilha( @relatorio_do_patrimonio )
		end
	end

	def imprimir_em_pdf(relatorio_do_patrimonio)
		relatorio = relatorio_do_patrimonio.relatorio rescue nil

		if relatorio.present?

			case relatorio.to_s
			when "inventario_anual_analitico"
				@bens = pesquisa_inventario_anual_analitico
			when "inventario_anual_sintetico"
				@bens = pesquisa_inventario_anual_sintetico
			when "balanco_inventario"
				@bens = pesquisa_balanco_inventario
			when "relacao_de_bens_por_centro_de_custo"
				@bens = pesquisa_relacao_de_bens_por_centro_de_custo
			when "relacao_de_bens_por_carga_patrimonial"
				@bens = pesquisa_relacao_de_bens_por_carga_patrimonial
			when "relacao_de_bens_por_ingresso"
				@bens = pesquisa_relacao_de_bens_por_ingresso
			when "relacao_de_vida_util_dos_bens"
				@bens = pesquisa_relacao_de_vida_util_dos_bens
			when "relacao_de_conservacao_dos_bens"
				@bens = pesquisa_relacao_de_conservacao_dos_bens
			when "relacao_de_bens_moveis_por_localizacao"
				@bens = pesquisa_relacao_de_bens_moveis_por_localizacao
			when "relacao_de_bens_transferidos"
				@bens = pesquisa_relacao_de_bens_transferidos
			when "relacao_de_bens_tombados"
				@bens = pesquisa_relacao_de_bens_tombados
			when "relacao_de_bens_patrimoniais_com_status"	
				@bens = pesquisa_relacao_de_bens_patrimoniais_com_status
			when "relacao_de_bens_baixados"
				@bens = pesquisa_relacao_de_bens_baixados
			when "relacao_de_bens_depreciados"
				@bens = pesquisa_relacao_de_bens_depreciados
			when "relacao_de_bens_depreciados_ate"
				@bens = pesquisa_relacao_de_bens_depreciados_ate
			when "relacao_de_bens_pendentes_de_avaliacao"
				@bens = pesquisa_relacao_de_bens_pendentes_de_avaliacao
			when "relacao_de_bens_reavaliados"
				@bens = pesquisa_relacao_de_bens_reavaliados
			when "relacao_de_valores_saldos_patrimoniais_de_bens_moveis"
				@bens = pesquisa_relacao_de_valores_saldos_patrimoniais_de_bens_moveis
			when "relacao_de_incorporacao_de_bens_moveis"
				@bens = pesquisa_relacao_de_incorporacao_de_bens_moveis
			when "relacao_de_bens_desreconhecidos"
				@bens = pesquisa_relacao_de_bens_desreconhecidos
			when "relacao_de_transferencias_recebidas_concedidas_entre_ugs"
				@bens = pesquisa_relacao_de_transferencias_recebidas_concedidas_entre_ugs	
			when "relacao_de_centros"
				@centros = pesquisa_relacao_de_centros
			when "relacao_depreciacao_por_periodo"
				@centros = pesquisa_relacao_depreciacao_por_periodo
			when "relacao_transferencia_por_periodo"
				@centros = pesquisa_relacao_transferencia_por_periodo
			when "relacao_ajuste_de_valor_por_periodo"
				@centros = pesquisa_relacao_ajuste_de_valor_por_periodo
			when "relacao_reavaliacao_de_valor_por_periodo"
				@centros = pesquisa_relacao_reavaliacao_de_valor_por_periodo
			when "relacao_recebimento_por_doacao_por_periodo"
				@centros = pesquisa_relacao_recebimento_por_doacao_por_periodo
			when "relacao_vpa_vpp"
				@centros = pesquisa_relacao_vpa_vpp
			when "termo_de_guarda_patrimonial"
				@dados = pesquisa_termo_de_guarda_patrimonial
			when "termo_de_movimentacao"
				@dados = pesquisa_termo_de_movimentacao
			end

			unless relatorio.to_s.eql?("inventario_anual_analitico")
				arquivo = CombinePDF.new
				arquivo << CombinePDF.parse(send(relatorio))
				arquivo.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
				send_data arquivo.to_pdf, filename: "#{relatorio.to_s}.pdf", type: "application/pdf", disposition: 'inline'
				return
			end
		else
			redirect_to patrimonio_selecionar_relatorio_path, alert: 'Relatório selecionado não existe'
		end
	end

	def planilha(relatorio_do_patrimonio)
		relatorio = relatorio_do_patrimonio.relatorio rescue nil
		request.format = "xlsx"
		@configuracao = Configuracao.last

		respond_to do |format|
			format.xlsx {
				if relatorio.to_s.eql?("inventario")
					@estoques = pesquisa_inventario
					render xlsx: 'saldo_da_ata_por_unidade', template: 'gestao_de_estoque/relatorios_da_gestao_de_estoque/relacao_consumos', filename: 'relacao_consumos.xlsx'
				elsif relatorio.to_s.eql?("bens_movimentados")
					@bens = pesquisa_inventario_anual_sintetico
					# render xlsx: 'saldo_da_ata_por_unidade', template: 'gestao_de_estoque/relatorios_da_gestao_de_estoque/relacao_consumos', filename: 'relacao_consumos.xlsx'
				elsif relatorio.to_s.eql?("depreciacao")
					@bens = pesquisa_depreciacao
					# render xlsx: 'saldo_da_ata_por_unidade', template: 'gestao_de_estoque/relatorios_da_gestao_de_estoque/relacao_consumos', filename: 'relacao_consumos.xlsx'
				end
			}
		end

	end

	#-----------------------------------------------------------------------------------------------------------#

	#Relatórios especificos

	def pesquisa_termo_de_guarda_patrimonial
		if params[:recebimento_de_bem_id].present?
			@observacao = params[:observacao]
			@recebimento_de_bem = Patrimonio::RecebimentoDeBem.find_by(id: params[:recebimento_de_bem_id].to_i)
		end
	end

	def termo_de_guarda_patrimonial
		render_to_string pdf: "recebimento_de_bem",
      template: "patrimonio/relatorios_do_patrimonio/relatorios_gerais/imprimir_termo_de_guarda_patrimonial.pdf.slim",
      orientation: 'Portrait',
      disable_smart_shrinking: true,
      
      dpi: '96',
      header: {
        html: {
          template: 'layouts/_cabecalho_pdf_central.html.slim',
          locals: {
            titulo1: "TERMO DE GUARDA PATRIMONIAL"
          }
        },
        spacing: 5
      },
      footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
      margin: configuracao.margens_customizadas
	end

	def pesquisa_termo_de_movimentacao
		if params[:requisicao_patrimonial_id].present?
			@mostra_dados = params[:mostra_dados]
			@responsavel_relatorio = @relatorio_do_patrimonio.responsavel_relatorio
			@cargo_relatorio = @relatorio_do_patrimonio.cargo_relatorio
			@matricula_relatorio = @relatorio_do_patrimonio.matricula_relatorio
			@responsavel_relatorio_destino = @relatorio_do_patrimonio.responsavel_relatorio_destino
			@cargo_relatorio_destino = @relatorio_do_patrimonio.cargo_relatorio_destino
			@matricula_relatorio_destino = @relatorio_do_patrimonio.matricula_relatorio_destino

			@requisicao_patrimonial = Patrimonio::RequisicaoPatrimonial.find_by(id: params[:requisicao_patrimonial_id].to_i)
		end
	end

	def termo_de_movimentacao
		@configuracoes = Configuracao.last
		@unidade_gestora = @requisicao_patrimonial.unidade_gestora

    render_to_string pdf: "Termo de Movimentação",
      template: "patrimonio/requisicoes_patrimoniais/relatorios/termo_de_movimentacao.pdf.slim",
      orientation: 'Portrait',
      disable_smart_shrinking: true,

      dpi: '96',
      header: {
        html: {
          template: 'layouts/_cabecalho_pdf_central_patrimonio.html.slim',
          locals: {
            titulo1: "TERMO DE MOVIMENTAÇÃO"
          }
        },
        spacing: 5
      },
      footer: {
        html: {
          template: 'layouts/_rodape_pdf.html.slim'
        }
      },
      margin: @configuracoes.margens_customizadas
  end

	#-----------------------------------------------------------------------------------------------------------#

	#Relação de INVENTARIO de Bens Patrimonais

	# def pesquisa_inventario_anual_analitico
	# 	@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
	# 	@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
	# 	@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
	# 	clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
	# 	@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
	# 	@imprimir_capas = params[:capas].to_boolean
	# 	@imprimir_capas_extra = params[:capas_extra].to_boolean

	# 	if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
	# 		clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
	# 	else
	# 		ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
	# 		clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
	# 	end

	# 	@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
	# 		.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
	# 		.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

	# 	return @bens
	# end

	# def inventario_anual_analitico
	# 	render_to_string pdf: "relacao_bens_movimentados",
	# 		template: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/inventario_anual_analitico.pdf.slim",
	# 		orientation: 'Portrait',
	# 		disable_smart_shrinking: true,
			
	# 		dpi: '96',
	# 		header: {
	# 			html: {
	# 				template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
	# 				locals: {
	# 					titulo1: "Relatório de Inventário Analítico",
	# 					titulo2: "De #{@data_inicial} até #{@data_final}"
	# 				}
	# 			},
	# 			spacing: 5
	# 		},
	# 		margin: @configuracoes.margens_customizadas
	# end
	def pesquisa_inventario_anual_analitico
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		@imprimir_capas = params[:capas].to_boolean
		@imprimir_capas_extra = params[:capas_extra].to_boolean
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
			.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
			.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

		arquivo = CombinePDF.new
		arquivo_corpo = CombinePDF.new
		if @bens.present? && @imprimir_capas
			arquivo << CombinePDF.parse(capa_inventario)
			arquivo_corpo << CombinePDF.parse(inventario_anual_analitico)
			arquivo << CombinePDF.parse(inventario_anual_analitico).number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
			@tamanho = arquivo_corpo.number_pages.size
			arquivo << CombinePDF.parse(contra_capa_inventario)
			@tem_arquivo = true
		elsif @imprimir_capas_extra
			arquivo << CombinePDF.parse(capa_inventario)
			arquivo << CombinePDF.parse(contra_capa_inventario)
			@tem_arquivo = true
		end

		if @tem_arquivo
			send_data arquivo.to_pdf, filename: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/inventario_anual_analitico.pdf.slim", type: "application/pdf", disposition: 'inline'
		else
			arquivo << CombinePDF.parse(inventario_anual_analitico)
			arquivo.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
			send_data arquivo.to_pdf, filename: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/inventario_anual_analitico.pdf.slim", type: "application/pdf", disposition: 'inline'
		end

	end

	def capa_inventario
		render_to_string pdf: "capa_inventario",
			template: "patrimonio/relatorios_do_patrimonio/capas/capa.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			dpi: '96',
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def contra_capa_inventario
		render_to_string pdf: "capa_inventario",
			template: "patrimonio/relatorios_do_patrimonio/capas/contra_capa.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			dpi: '96',
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def inventario_anual_analitico
		render_to_string pdf: "relacao_bens_movimentados",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/inventario_anual_analitico.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Inventário Analítico",
						titulo2: "De #{@data_inicial} até #{@data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_inventario_anual_sintetico
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora.blank?
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			unless@relatorio_do_patrimonio.unidade_gestora.blank?
				ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
				clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
			end
		end

		unless @relatorio_do_patrimonio.unidade_gestora.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
				.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
				.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)
		else
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora)
				.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).distinct.order(numero_do_tombamento: :asc)
		end

		return @bens

	end

	def inventario_anual_sintetico
		render_to_string pdf: "relacao_bens_movimentados",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/inventario_anual_sintetico.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Inventário Sintético",
						titulo2: "De #{@data_inicial} até #{@data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_balanco_inventario
		@data = if @relatorio_do_patrimonio.data.blank?
			Date.today.end_of_month
		else
			Date.new(exercicio_atual, @relatorio_do_patrimonio.data.to_i).end_of_month
		end
	
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora.blank?
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			unless@relatorio_do_patrimonio.unidade_gestora.blank?
				ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
				clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
			end
		end

		unless @relatorio_do_patrimonio.unidade_gestora.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
				.where('patrimonio_bens_patrimoniais.status = 1 and data_do_tombamento <= ?', @data).where(clausula_unidade_gestora)
				.where(clausula_centro_de_custo).distinct
			@bens_baixados = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
				.where('patrimonio_bens_patrimoniais.status = 6 and data_do_tombamento <= ?', @data).where(clausula_unidade_gestora)
				.where(clausula_centro_de_custo).distinct
		else
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora)
				.where('patrimonio_bens_patrimoniais.status = 1 and data_do_tombamento <= ?', @data).distinct
		end

		return @bens

	end

	def balanco_inventario
		render_to_string pdf: "balanco_inventario",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_inventario/balanco_inventario.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Posição de Saldo Patrimonial",
						titulo2: "Exercício: #{contexto_atual.exercicio}",
						titulo3: "Até #{@data}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	#Relação de Bens Patrimonais

	def pesquisa_relacao_de_bens_tombados
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
			.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
			.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

		return @bens
	end

	def relacao_de_bens_tombados
		render_to_string pdf: "relacao_bens_de_bens_tombados",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_tombados.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Tombados",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_patrimoniais_com_status
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabímica")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
			.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
			.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

		return @bens
	end

	def relacao_de_bens_patrimoniais_com_status
		render_to_string pdf: "relacao_de_bens_patrimoniais_com_status",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_patrimoniais_com_status.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Relação de Bens Patrimoniais com Status",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_baixados
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = "patrimonio_bens_patrimoniais.unidade_gestora_id = #{@unidade_gestora.id}"
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		baixas = Patrimonio::BaixaDoBem.where('data_da_baixa between ? and ?', @data_inicial, @data_final)
		@bens = Patrimonio::BemPatrimonial.where('id in (?)', baixas.pluck(:bem_patrimonial_id)).where(clausula_unidade_gestora).order(numero_do_tombamento: :asc)

		if @relatorio_do_patrimonio.centro_de_custo.present?
			bens_novo = []
			@bens.each do |bem|
				local = bem.localizacao_apartir_de(@data_inicial)
				bens_novo << bem if local.present? && local.centro_de_custo.id == @centro_de_custo.id
			end
			@bens = bens_novo
		end

		return @bens.sort_by{ |bem| bem.numero_do_tombamento }
	end

	def relacao_de_bens_baixados
		render_to_string pdf: "relacao_bens_por_carga_patrimonial",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_baixados.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Desreconhecidos",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_depreciados
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)

		@depreciacoes = Patrimonio::DepreciacaoDoBem.joins(bem_patrimonial: :unidade_gestora).where('data_depreciacao between ? and ?', @data_inicial, @data_final)
		
		if @relatorio_do_patrimonio.unidade_gestora.present?
			@depreciacoes = @depreciacoes.where('patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @unidade_gestora.id)
		end

		if @relatorio_do_patrimonio.centro_de_custo.present? && @centro_de_custo != "Todos"
			@depreciacoes = @depreciacoes.joins(bem_patrimonial: [localizacao_atual: :centro_de_custo])
				.where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end

		return @bens = Patrimonio::BemPatrimonial.where('id in (?)', @depreciacoes.pluck(:bem_patrimonial_id).uniq)
	end

	def relacao_de_bens_depreciados
		render_to_string pdf: "relacao_bens_de_bens_depreciados",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_depreciacoes.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Depreciados",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_depreciados_ate
		@data =  @relatorio_do_patrimonio.data.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)

		@bens = Patrimonio::BemPatrimonial.exceto_essas_contas.where('patrimonio_bens_patrimoniais.data_do_tombamento <= ?', @data)

		if @relatorio_do_patrimonio.unidade_gestora.present?
			@bens = @bens.where('patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @unidade_gestora.id)
		end

		if @relatorio_do_patrimonio.centro_de_custo.present? && @centro_de_custo != "Todos"
			@bens = @bens.joins(localizacao_atual: :centro_de_custo).where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end
		
		return @bens.order(numero_do_tombamento: :asc).distinct
	end

	def relacao_de_bens_depreciados_ate
		render_to_string pdf: "relacao_de_bens_depreciados_ate",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_depreciacoes_ate.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Depreciados Até #{@data}",
						titulo2: "Até #{@data}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_por_centro_de_custo
		@data =  @relatorio_do_patrimonio.data.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora.blank? ? "Todos" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		@unidade_orcamentaria = contexto_atual.unidades_orcamentarias.find_by(unidade_gestora: @unidade_gestora).id
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)

		@bens = Patrimonio::BemPatrimonial.where('patrimonio_bens_patrimoniais.status = 1 and patrimonio_bens_patrimoniais.data_do_tombamento <= ?', @data)

		if @relatorio_do_patrimonio.unidade_gestora.present? && @unidade_gestora != "Todos"
			@bens = @bens.where('patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @unidade_gestora.id)
		end

		if @relatorio_do_patrimonio.centro_de_custo.present? && @centro_de_custo != "Todos"
			@bens = @bens.joins(:localizacao_atual).where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end

		return @bens
	end

	def relacao_de_bens_por_centro_de_custo
		render_to_string pdf: "relacao_bens_movimentados",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_por_centro_de_custo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Bens Patrimoniais",
						titulo2: "Até #{@data} ",
						titulo3: @ordem
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_por_carga_patrimonial
		@data =  @relatorio_do_patrimonio.data.blank? ? Date.today.to_date : @relatorio_do_patrimonio.data.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora).id
		@unidade_orcamentaria = contexto_atual.unidades_orcamentarias.find_by(unidade_gestora: @unidade_gestora).id
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)	
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @centro_de_custo.id}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@titulo2 = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora).codigo_e_nome

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora, :item)
			.where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null and patrimonio_bens_patrimoniais.status = 1 
				and patrimonio_bens_patrimoniais.data_do_tombamento <= ?', @data).where(clausula_unidade_gestora)

		if @relatorio_do_patrimonio.centro_de_custo.present?
			@bens = @bens.joins(:localizacao_atual).where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end

		if @relatorio_do_patrimonio.responsavel.present?
			@bens = @bens.joins(:responsaveis_do_bem_patrimonial).where('patrimonio_responsaveis_do_bem_patrimonial.pessoa_id in (?)', @relatorio_do_patrimonio.responsavel)
		end

		return @bens
	end

	def relacao_de_bens_por_carga_patrimonial
		render_to_string pdf: "relacao_bens_por_carga_patrimonial",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_por_carga_patrimonial.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens por Carga Patrimonial na data #{@data}",
						titulo2: @titulo2,
						titulo3: @ordem
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_por_ingresso
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)	
		@ingresso_do_bem = @relatorio_do_patrimonio.ingresso_do_bem
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
			.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
			.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

		if @ingresso_do_bem.present?
			@bens = @bens.joins(:dados_extras_do_bem).where('patrimonio_dados_extras_dos_bens.tipo_de_ingresso = ?', @ingresso_do_bem )
		end

		return @bens

	end

	def relacao_de_bens_por_ingresso
		render_to_string pdf: "relacao_de_bens_por_ingresso",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_por_ingresso.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Patrimoniais Por Ingresso",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_vida_util_dos_bens
		@orcamento = Orcamento.find_by(id: @relatorio_do_patrimonio.orcamento.to_i)
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)	
		@vida_util = @relatorio_do_patrimonio.vida_util_boolean.to_i

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora, :item).where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null 
			and patrimonio_bens_patrimoniais.status = 1 and patrimonio_bens_patrimoniais.orcamento_id = ?', @orcamento.id).where(clausula_unidade_gestora)

		if @relatorio_do_patrimonio.centro_de_custo.present? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			bens = []
			if @vida_util == 1
				@bens.each do |bem|
					if bem.vida_util_remanescente > 0
						local = bem.localizacao_atual_id
						bens << bem if local.present? && local == @centro_de_custo.id
					end
				end
			else
				@bens.each do |bem|
					if bem.vida_util_remanescente <= 0
						local = bem.localizacao_atual_id
						bens << bem if local.present? && local == @centro_de_custo.id
					end
				end
			end
			@bens = bens
		else
			bens = []
			if @vida_util == 1
				@bens.each do |bem|
					if bem.vida_util_remanescente > 0
						bens << bem
					end
				end
			else
				@bens.each do |bem|
					if bem.vida_util_remanescente <= 0
						bens << bem
					end
				end
			end
			@bens = bens
		end

		return @bens.sort_by{ |bem| bem.numero_do_tombamento }

	end

	def relacao_de_vida_util_dos_bens
		render_to_string pdf: "relacao_de_vida_util_dos_bens",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_vida_util_dos_bens.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Vida Útil dos Bens",
						titulo2: "Orcamento: #{@orcamento.exercicio}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_conservacao_dos_bens
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)	
		@estado_do_bem = @relatorio_do_patrimonio.estado_do_bem.blank? ? "novo" : @relatorio_do_patrimonio.estado_do_bem
		
		bens_por_gestora = Patrimonio::BemPatrimonial.where(unidade_gestora: @unidade_gestora)
		conservacao_por_bem = Patrimonio::ConservacaoDoBem.joins(:bem_patrimonial).where('bem_patrimonial_id in (?) and data_da_conservacao between ? and ?', bens_por_gestora.pluck(:id), @data_inicial, @data_final)
		@bens_patrimoniais = Patrimonio::BemPatrimonial.where('id in (?)', conservacao_por_bem.pluck(:bem_patrimonial_id))

		if @relatorio_do_patrimonio.centro_de_custo.present?
			bens_novo = []
			@bens_patrimoniais.each do |bem|
				local = bem.localizacao_apartir_de(@data_inicial)
				bens_novo << bem if local.present? && local.centro_de_custo.id == @centro_de_custo.id
			end
			@bens_patrimoniais = []
			@bens_patrimoniais = bens_novo
		end

		if @relatorio_do_patrimonio.estado_do_bem.present?
			bens_finais = []
			@bens_patrimoniais.each do |bem|
				conservacao = bem.ultima_conservacao_do_bem
				bens_finais << bem if @estado_do_bem.present? && conservacao.estado_do_bem == @estado_do_bem
			end
			@bens_patrimoniais = []
			@bens_patrimoniais = bens_finais
		end

		return @bens_patrimoniais.sort_by{ |bem| bem.numero_do_tombamento }

	end

	def relacao_de_conservacao_dos_bens
		render_to_string pdf: "relacao_de_conservacao_dos_bens",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_conservacao_dos_bens.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Conservação dos Bens Patrimoniais",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_moveis_por_localizacao
		@data =  @relatorio_do_patrimonio.data.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabética")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		incluir_bens_cedidos = @relatorio_do_patrimonio.incluir_bens_cedidos == '1'
		
		@bens = Patrimonio::BemPatrimonial.where('patrimonio_bens_patrimoniais.status = 1	AND patrimonio_bens_patrimoniais.data_do_tombamento <= ? 
		AND patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @data, @unidade_gestora.id).order(numero_do_tombamento: :asc)

		if incluir_bens_cedidos
			@bens = @bens.where(status_complementar: 'cedido').or(@bens.where(status_complementar: nil))
		else
			@bens = @bens.where(status_complementar: 'nao_cedido').or(@bens.where(status_complementar: nil))
		end
		
		if @centro_de_custo != "Todos"
			@bens = @bens.joins(:localizacao_atual).where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end

		return @bens
	end

	def relacao_de_bens_moveis_por_localizacao
		render_to_string pdf: "relacao_bens_por_carga_patrimonial",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_moveis_por_localizacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Móveis por Localização",
						titulo2: "Data: #{@data}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_transferidos
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ordem = @relatorio_do_patrimonio.ordem.blank? ? "Ordem de Tombamento" : (@relatorio_do_patrimonio.ordem == "1" ? "Ordem de Tombamento" : "Ordem Alfabótica")
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
			clausula_centro_de_custo = {controladoria_centro_de_custos: {id: @relatorio_do_patrimonio.centro_de_custo}} 
		else
			ids_centro_de_custos_unidade = Controladoria::CentroDeCusto.where(unidade_gestora_id: @unidade_gestora).pluck(:id)
			clausula_centro_de_custo = "controladoria_centro_de_custos.unidade_gestora_id = #{@unidade_gestora.id} OR (controladoria_centro_de_custos.unidade_gestora_id is NULL AND controladoria_centro_de_custos.mae_principal_id in (?))", ids_centro_de_custos_unidade
		end

		@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).joins(localizacoes_dos_bens: :centro_de_custo)
			.where('data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
			.where(clausula_centro_de_custo).distinct.order(numero_do_tombamento: :asc)

		@transferencias = Patrimonio::Transferencia.joins(:itens_da_transferencia).where('data_da_transferencia between ? and ?', @data_inicial, @data_final).order(data_da_transferencia: :asc)
		@itens_da_transferencia = Patrimonio::ItemDaTransferencia.joins(:transferencia).where('patrimonio_transferencias.data_da_transferencia between ? and ?', @data_inicial, @data_final)

		return @transferencias
	end

	def relacao_de_bens_transferidos
		render_to_string pdf: "relacao_bens_transferidos",
			template: "patrimonio/relatorios_do_patrimonio/relatorios/relacao_de_bens_transferidos.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório de Bens Transferidos",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	#Verificação de Bens Patrimoniais

	def pesquisa_relacao_de_bens_pendentes_de_avaliacao
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)

		@bens = Patrimonio::BemPatrimonial.exceto_essas_contas.where('patrimonio_bens_patrimoniais.status = 1 AND patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @unidade_gestora.id).order(numero_do_tombamento: :asc)

		if @centro_de_custo != "Todos"
			@bens = @bens.joins(:localizacao_atual).where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
		end

		return @bens
	end

	def relacao_de_bens_pendentes_de_avaliacao
		render_to_string pdf: "relacao_bens_por_carga_patrimonial",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_verificacao/relacao_de_bens_pendentes_de_avaliacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Bens Pendentes De Avaliação",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end
	
	def pesquisa_relacao_de_bens_reavaliados
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id}
		@centro_de_custo = @relatorio_do_patrimonio.centro_de_custo.blank? ? "Todos" : Controladoria::CentroDeCusto.find_by(id: @relatorio_do_patrimonio.centro_de_custo)
		
		@avaliacoes = Patrimonio::AvaliacaoDoBem.joins(:bem_patrimonial).where('patrimonio_bens_patrimoniais.unidade_gestora_id = ? 
			and data_da_avaliacao between ? and ?', @unidade_gestora.id, @data_inicial, @data_final)
			
			if !@relatorio_do_patrimonio.centro_de_custo.blank? && @relatorio_do_patrimonio.centro_de_custo != "Todos"
				@avaliacoes = @avaliacoes
																.joins(bem_patrimonial: [localizacoes_dos_bens: :centro_de_custo])
																.where('patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @centro_de_custo.id)
																.where('patrimonio_localizacoes_dos_bens.data_de_inicio_na_localizacao BETWEEN ? AND ?', @data_inicial, @data_final)
																.select('DISTINCT patrimonio_bens_patrimoniais.id, patrimonio_avaliacoes_dos_bens.*')
			end
			
			
		return @avaliacoes
	end

	def relacao_de_bens_reavaliados
		render_to_string pdf: "relacao_de_bens_pendentes_de_avaliacao",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_verificacao/relacao_de_bens_reavaliados.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Bens Reavaliados",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	#Relação de Centro de Custos

	def pesquisa_relacao_de_centros
		@data =  @relatorio_do_patrimonio.data.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data.to_date
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)

		@centro_principal = Controladoria::CentroDeCusto.find_by(unidade_gestora: @unidade_gestora.id)
	end

	def relacao_de_centros
		render_to_string pdf: "relacao_de_centro",
			template: "patrimonio/relatorios_do_patrimonio/relacao_de_centro.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Centro de Custo",
						titulo2: "Data: #{@data}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	#Relatórios de Verificação por grupo

	def pesquisa_relacao_de_valores_saldos_patrimoniais_de_bens_moveis
		@data =  @relatorio_do_patrimonio.data.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data.to_date
		@data_inicial = "01/01/#{exercicio_atual}".to_date
		@grupos_de_bens = @relatorio_do_patrimonio.grupos_de_bens unless  @relatorio_do_patrimonio.grupos_de_bens.blank?
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		sub_elemento_de_despesa = Contabilidade::SubElementoDeDespesa.find_by(codigo: @relatorio_do_patrimonio.grupos_de_bens) if @relatorio_do_patrimonio.grupos_de_bens.present?
		sub_elemento_ids = Contabilidade::SubElementoDeDespesa.where(codigo: sub_elemento_de_despesa.codigo).pluck(:id) if @relatorio_do_patrimonio.grupos_de_bens.present?
		
		if @relatorio_do_patrimonio.grupos_de_bens.present?
			@bens = Patrimonio::BemPatrimonial.joins(:sub_elemento_de_despesa).where(sub_elemento_de_despesa_id: sub_elemento_ids)
		else
			@bens = Patrimonio::BemPatrimonial.all
		end
	
		@bens = @bens
								.joins(
									"LEFT JOIN patrimonio_itens_da_transferencia itens ON itens.bem_patrimonial_id = patrimonio_bens_patrimoniais.id
										LEFT JOIN patrimonio_transferencias transf ON transf.id = itens.transferencia_id"
								)
								.where(
									"(patrimonio_bens_patrimoniais.tipo_de_bem = :tipo_de_bem AND patrimonio_bens_patrimoniais.unidade_gestora_id = :unidade_gestora_id AND 
										(transf.data_da_transferencia IS NULL OR transf.data_da_transferencia < :data)) OR 
										(transf.unidade_gestora_origem_id = :unidade_gestora_id AND transf.data_da_transferencia > :data)",
										tipo_de_bem: 1,
										unidade_gestora_id: @unidade_gestora.id,
										data: @data
								)
								.distinct
																							

			return @bens
	end

	def relacao_de_valores_saldos_patrimoniais_de_bens_moveis
		render_to_string pdf: "relacao_de_valores_saldos_patrimoniais_de_bens_moveis",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_transferencias/relacao_de_valores_saldos_patrimoniais_de_bens_moveis.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Valores e Saldos Patriminiais de Bens Móveis Por Grupo",
						titulo2: "Data: #{@data}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_incorporacao_de_bens_moveis
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@ingresso_do_bem = @relatorio_do_patrimonio.ingresso_do_bem.to_i unless  @relatorio_do_patrimonio.ingresso_do_bem.blank?
		sub_elemento_de_despesa = Contabilidade::SubElementoDeDespesa.find_by(codigo: @relatorio_do_patrimonio.grupos_de_bens) if @relatorio_do_patrimonio.grupos_de_bens.present?
		sub_elemento_ids = Contabilidade::SubElementoDeDespesa.where(codigo: sub_elemento_de_despesa.codigo).pluck(:id) if @relatorio_do_patrimonio.grupos_de_bens.present?
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		
		if @relatorio_do_patrimonio.grupos_de_bens.present?
			@bens = Patrimonio::RecebimentoDeBem.joins.joins(:sub_elemento_de_despesa).where(sub_elemento_de_despesa_id: sub_elemento_ids)
		else
			@bens = Patrimonio::RecebimentoDeBem.all
		end
		
		@bens = @bens.joins(:unidade_orcamentaria)
									.where(
										'patrimonio_recebimentos_de_bens.data_do_recebimento BETWEEN ? AND ? 
										AND patrimonio_recebimentos_de_bens.status = 3
										AND loa_unidades_orcamentarias.unidade_gestora_id = ?',
										@data_inicial, @data_final, @unidade_gestora.id
									)
									
		if @ingresso_do_bem.present?
			@bens = @bens.where('patrimonio_recebimentos_de_bens.classificacao = ?', @ingresso_do_bem )
		end	
		
		return @bens
	end

	def relacao_de_incorporacao_de_bens_moveis
		render_to_string pdf: "relacao_de_incorporacao_de_bens_moveis",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_transferencias/relacao_de_incorporacao_de_bens_moveis.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Incorporação de Bens Móveis Por Grupo",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_bens_desreconhecidos
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@motivo_desreconhecimento = @relatorio_do_patrimonio.motivo_desreconhecimento.to_i unless  @relatorio_do_patrimonio.motivo_desreconhecimento.blank?
		sub_elemento_de_despesa = Contabilidade::SubElementoDeDespesa.find_by(codigo: @relatorio_do_patrimonio.grupos_de_bens) if @relatorio_do_patrimonio.grupos_de_bens.present?
		sub_elemento_ids = Contabilidade::SubElementoDeDespesa.where(codigo: sub_elemento_de_despesa.codigo).pluck(:id) if @relatorio_do_patrimonio.grupos_de_bens.present?
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)

		if @relatorio_do_patrimonio.grupos_de_bens.present?
			@bens = Patrimonio::BemPatrimonial.joins(:sub_elemento_de_despesa).where(sub_elemento_de_despesa_id: sub_elemento_ids)
		else
			@bens = Patrimonio::BemPatrimonial.all
		end
		
		@bens = @bens.joins(:baixa_do_bem).where('
		patrimonio_baixas_dos_bens.data_da_baixa between ? and ? AND patrimonio_bens_patrimoniais.status = 6 
			AND patrimonio_bens_patrimoniais.unidade_gestora_id = ?', @data_inicial, @data_final, @unidade_gestora.id)

		if @motivo_desreconhecimento.present?
			@bens = @bens.where('patrimonio_baixas_dos_bens.motivo_da_baixa = ?', @motivo_desreconhecimento)
		end

		return @bens
	end

	def relacao_de_bens_desreconhecidos
		render_to_string pdf: "relacao_de_bens_desreconhecidos",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_transferencias/relacao_de_bens_desreconhecidos.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Bens Desreconhecidos Por Grupo",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_transferencias_recebidas_concedidas_entre_ugs
		# Definindo o período de pesquisa
		@data_inicial = @relatorio_do_patrimonio.data_inicial.present? ? @relatorio_do_patrimonio.data_inicial.to_date : Date.new(Date.today.year, Date.today.month, 1)
		@data_final = @relatorio_do_patrimonio.data_final.present? ? @relatorio_do_patrimonio.data_final.to_date : Date.today
		sub_elemento_de_despesa = Contabilidade::SubElementoDeDespesa.find_by(codigo: @relatorio_do_patrimonio.grupos_de_bens) if @relatorio_do_patrimonio.grupos_de_bens.present?
		sub_elemento_ids = Contabilidade::SubElementoDeDespesa.where(codigo: sub_elemento_de_despesa.codigo).pluck(:id) if @relatorio_do_patrimonio.grupos_de_bens.present?
		
		if @relatorio_do_patrimonio.grupos_de_bens.present?
			@bens = Patrimonio::BemPatrimonial.joins(:sub_elemento_de_despesa).where(sub_elemento_de_despesa_id: sub_elemento_ids)
		else 
			@bens = Patrimonio::BemPatrimonial.all	
		end
		
		
		if @relatorio_do_patrimonio.unidade_gestora.present?
			@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		
			case @relatorio_do_patrimonio.tipo_de_transferencia
			when '1'
				@bens = @bens
										.joins("INNER JOIN patrimonio_itens_da_transferencia a ON a.bem_patrimonial_id = patrimonio_bens_patrimoniais.id")
										.joins("INNER JOIN patrimonio_transferencias b ON b.id = a.transferencia_id")
										.where("b.data_da_transferencia BETWEEN ? AND ?", @data_inicial, @data_final)
										.where("a.unidade_gestora_id = ?", @unidade_gestora.id)
										.select("patrimonio_bens_patrimoniais.*, b.data_da_transferencia AS data_transferencia")
										.distinct
			
		
			when '2'
				# Transferências concedidas
				@bens = @bens
										.joins("INNER JOIN patrimonio_itens_da_transferencia a ON a.bem_patrimonial_id = patrimonio_bens_patrimoniais.id")
										.joins("INNER JOIN patrimonio_transferencias b ON b.id = a.transferencia_id")
										.where("b.data_da_transferencia BETWEEN ? AND ?", @data_inicial, @data_final)
										.where("b.unidade_gestora_origem_id = ?", @unidade_gestora.id)
										.where("a.unidade_gestora_id <> b.unidade_gestora_origem_id")
										.select("patrimonio_bens_patrimoniais.*, b.data_da_transferencia AS data_transferencia")
										.distinct
				
			when '3'
				# Transferências recebidas e concedidas
				@bens_recebidos = @bens
														.joins("INNER JOIN patrimonio_itens_da_transferencia a ON a.bem_patrimonial_id = patrimonio_bens_patrimoniais.id")
														.joins("INNER JOIN patrimonio_transferencias b ON b.id = a.transferencia_id")
														.where("b.data_da_transferencia BETWEEN ? AND ?", @data_inicial, @data_final)
														.where("a.unidade_gestora_id = ?", @unidade_gestora.id)
														.where("a.unidade_gestora_id <> b.unidade_gestora_origem_id")
														.select("patrimonio_bens_patrimoniais.*, b.data_da_transferencia AS data_transferencia")
														.distinct
				
				@bens_concedidos = @bens
														.joins("INNER JOIN patrimonio_itens_da_transferencia a ON a.bem_patrimonial_id = patrimonio_bens_patrimoniais.id")
														.joins("INNER JOIN patrimonio_transferencias b ON b.id = a.transferencia_id")
														.where("b.data_da_transferencia BETWEEN ? AND ?", @data_inicial, @data_final)
														.where("b.unidade_gestora_origem_id = ?", @unidade_gestora.id)
														.where("a.unidade_gestora_id <> b.unidade_gestora_origem_id")
														.select("patrimonio_bens_patrimoniais.*, b.data_da_transferencia AS data_transferencia") 
														.distinct
			end
		end
	end


	
	def relacao_de_transferencias_recebidas_concedidas_entre_ugs
		render_to_string pdf: "relacao_de_transferencias_recebidas_concedidas_entre_ugs",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_transferencias/relacao_de_transferencias_recebidas_concedidas_entre_ugs.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relação de Transferências Recebidas e Concedidas Entre UGS Por Grupo",
						titulo2: "Periodo de #{@data_inicial} até #{@data_final} ",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	#Relação dos Bens Patrimoniais Por Grupo de Bens

	def pesquisa_relacao_depreciacao_por_periodo
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_rela)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora_rela.blank?

		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.group_by(&:sub_elemento_de_despesa)
		@elementos = Base::ElementoDeDespesa.where.not(inativo: true).all

		unless @relatorio_do_patrimonio.unidade_gestora_rela.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora)
				.where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null and patrimonio_bens_patrimoniais.status = 1')
				.where(clausula_unidade_gestora)
		end

	end

	def relacao_depreciacao_por_periodo
		@unidade = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : @unidade_gestora.nome
		render_to_string pdf: "relacao_depreciacao_por_periodo",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_por_grupo/relacao_depreciacao_por_periodo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Depreciação por Período",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_transferencia_por_periodo
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora_origem = @relatorio_do_patrimonio.unidade_gestora_origem.blank? ? 'Consolidado' : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_origem)
		@unidade_gestora_destino = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_destino)
		
		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.group_by(&:sub_elemento_de_despesa).sort
		@elementos = orcamento_atual.elementos_de_despesa

		@transferencias = Patrimonio::Transferencia.where('data_da_transferencia between ? and ?', @data_inicial, @data_final)

	end

	def relacao_transferencia_por_periodo
		render_to_string pdf: "relacao_transferencia_por_periodo",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_por_grupo/relacao_transferencia_por_periodo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Transferência no Período"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_ajuste_de_valor_por_periodo
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_rela)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora_rela.blank?

		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.group_by(&:sub_elemento_de_despesa).sort
		@elementos = orcamento_atual.elementos_de_despesa

		unless @relatorio_do_patrimonio.unidade_gestora_rela.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora)
				.where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null and patrimonio_bens_patrimoniais.status = 1')
				.where(clausula_unidade_gestora)
		end

	end

	def relacao_ajuste_de_valor_por_periodo
		@unidade = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : @unidade_gestora.nome
		render_to_string pdf: "relacao_ajuste_de_valor_por_periodo",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_por_grupo/relacao_ajuste_de_valor_por_periodo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Ajuste de Valor no Período",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_reavaliacao_de_valor_por_periodo
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_rela)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora_rela.blank?

		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.group_by(&:sub_elemento_de_despesa).sort
		@elementos = orcamento_atual.elementos_de_despesa

		unless @relatorio_do_patrimonio.unidade_gestora_rela.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora)
				.where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null and patrimonio_bens_patrimoniais.status = 1')
				.where(clausula_unidade_gestora)
		end

	end

	def relacao_reavaliacao_de_valor_por_periodo
		@unidade = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : @unidade_gestora.nome
		render_to_string pdf: "relacao_reavaliacao_de_valor_por_periodo",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_por_grupo/relacao_reavaliacao_de_valor_por_periodo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Reavaliação no Período",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_recebimento_por_doacao_por_periodo
		@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
		@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_final.to_date
		@unidade_gestora = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora_rela)
		clausula_unidade_gestora = {unidade_gestora_id: @unidade_gestora.id} if !@relatorio_do_patrimonio.unidade_gestora_rela.blank?
		
		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.group_by(&:sub_elemento_de_despesa).sort
		@elementos = orcamento_atual.elementos_de_despesa

		unless @relatorio_do_patrimonio.unidade_gestora_rela.blank?
			@bens = Patrimonio::BemPatrimonial.joins(:unidade_gestora).where('patrimonio_bens_patrimoniais.unidade_gestora_id is not null 
				and patrimonio_bens_patrimoniais.status = 1 and data_do_tombamento between ? and ?', @data_inicial, @data_final).where(clausula_unidade_gestora)
		end

	end

	def relacao_recebimento_por_doacao_por_periodo
		@unidade = @relatorio_do_patrimonio.unidade_gestora_rela.blank? ? "Consolidado" : @unidade_gestora.nome
		render_to_string pdf: "relacao_recebimento_por_doacao_por_periodo",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_por_grupo/relacao_recebimento_por_doacao_por_periodo.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Incorporações no Período",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end


	#RELATÓRIOS DO INTERMODULOS

	def pesquisa_relacao_vpa_vpp
		
		@unidade_gestora = Loa::UnidadeGestora.find_by(id: @relatorio_do_patrimonio.unidade_gestora)
		@sub_elemento_de_despesa = @relatorio_do_patrimonio.sub_elemento_de_despesa
		@mes_de_referencia = @relatorio_do_patrimonio.mes_de_referencia
		@contas = Patrimonio::DepreciacaoVidaUtilConfiguracao.all.order(conta_pcasp: :asc)
		@elementos = orcamento_atual.elementos_de_despesa

		if @relatorio_do_patrimonio.data_inicial.blank?
			@data_inicial = "01/#{@mes_de_referencia.to_i}/#{exercicio_atual}".to_date
			@data_final = "01/#{@mes_de_referencia.to_i}/#{exercicio_atual}".to_date.end_of_month
		else
			@data_inicial =  @relatorio_do_patrimonio.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_do_patrimonio.data_inicial.to_date
			@data_final = @relatorio_do_patrimonio.data_final.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date.end_of_month : @relatorio_do_patrimonio.data_final.to_date
		end

		if @sub_elemento_de_despesa.present?
			sub_elemento = Contabilidade::SubElementoDeDespesa.find_by( id: @sub_elemento_de_despesa.to_i )

			@movimentacoes = Patrimonio::MovimentacaoFinanceiraDoBem.joins(bem_patrimonial: [sub_elemento_de_despesa: :elemento_de_despesa])
				.where('base_elementos_de_despesa.codigo = ? and patrimonio_bens_patrimoniais.unidade_gestora_id = ? and patrimonio_bens_patrimoniais.status = 1 
				and data_da_movimentacao between ? and ?', sub_elemento.elemento_de_despesa.codigo, @unidade_gestora.id, @data_inicial, @data_final)
				.includes(:bem_patrimonial)
		else
			@movimentacoes = Patrimonio::MovimentacaoFinanceiraDoBem.joins(:bem_patrimonial)
				.where('patrimonio_bens_patrimoniais.unidade_gestora_id = ? and patrimonio_bens_patrimoniais.status = 1 
					and data_da_movimentacao between ? and ?', @unidade_gestora.id, @data_inicial, @data_final).includes(:bem_patrimonial)
		end

		@transferencias = Patrimonio::Transferencia.where('data_da_transferencia between ? and ?', @data_inicial, @data_final).distinct
		@reavaliacao = Patrimonio::AvaliacaoDoBem.where('data_da_avaliacao between ? and ?', @data_inicial, @data_final)

	end

	def relacao_vpa_vpp
		render_to_string pdf: "relacao_de_centro",
			template: "patrimonio/relatorios_do_patrimonio/relatorios_de_variacao_patrimonial/relacao_vpa_vpp.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_gerenciais_patrimonio.html.slim',
					locals: {
						titulo1: "Relatório VPA e VPD por grupo",
						titulo2: "De #{@data_inicial} até #{@data_final}",
						titulo3: @unidade_gestora.nome
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	private

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
		
	end

	def disponibiliza_dependencias_formulario
		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.order(:codigo, :nome)
		else
			@unidades_orcamentarias = current_usuario.unidades_orcamentarias.joins(:orgao).where('loa_orgaos.orcamento_id = ?', contexto_atual.id).order(:codigo, :nome).uniq
		end
		if current_usuario.desenvolvedor?
			@unidades_gestoras = Loa::UnidadeGestora.ativo_no_sistema.all.order("loa_unidades_gestoras.codigo::integer")
		else
			@unidades_gestoras = current_usuario.unidades_gestoras
																													.where("data_encerramento IS NULL OR data_encerramento >= ?", Date.today)
																													.order("loa_unidades_gestoras.codigo::integer")
																													.uniq
		end
		@tipos_de_transferencia = [['Recebidas', 1],['Concedidas', 2], ['Recebidas e Concedidas', 3]]
		@orcamentos = Orcamento.order('exercicio DESC')
		@estado_do_bens = []
		@vida_util_boolean = [['Vida útil positiva', 1],['Vida útil negativa', 2]]
		@ingresso_dos_bens = [
			['Doação', 1], ['Confecção', 2], ['Compra', 3], ['Carta de Sentença', 4],
			['Cessão', 5], ['Comodato', 6], ['Implantação', 7], ['Locação', 8],
			['Permuta', 9], ['Reintegracão', 10], ['Desapropriação', 11], ['Nascimento', 12],
			['Usucapião', 13], ['Dação em Pagamento', 14], ['Construção', 15], ['De Relançamento', 16]
		]

		#@grupos = []
		@grupos = contexto_atual.sub_elementos_de_despesa.includes(:elemento_de_despesa).ativos
		.where('base_elementos_de_despesa.codigo = ?', '44905200').where(base_elementos_de_despesa: {exibir_elemento_de_despesa: true})
		.order("base_elementos_de_despesa.codigo ASC, contabilidade_sub_elementos_de_despesa.codigo ASC ").map{|sub| [sub.codigo_e_descricao, sub.codigo] }

		@meses = [['Janeiro', 1], ['Fevereiro', 2], ['Março', 3], ['Abril', 4], ['Maio', 5],['Junho',6], ['Julho', 7], ['Agosto', 8], ['Setembro', 9], ['Outubro', 10],['Novembro', 11],['Dezembro', 12]]
		@agentes_publicos = ::Base::AgentePublicoMunicipal.joins(unidade_orcamentaria: {orgao: :orcamento}).where('orcamentos.exercicio = ?', exercicio_atual);
		@pessoas = ::Base::Pessoa.joins(:tipo_de_pessoa).where("base_pessoas.ativo = true AND base_tipo_de_pessoas.codigo in ('1','2')").includes(:tipo_de_pessoa);
		@centros_de_custo = []
		@ordem = [
			['Ordem de Tombamento', 1],
			['Ordem Alfabética', 2]
		]
		@meses = [
			['Janeiro', 1], ['Fevereiro', 2], ['Março', 3], ['Abril', 4],
			['Maio', 5], ['Junho', 6], ['Julho', 7], ['Agosto', 8],
			['Setembro', 9], ['Outubro', 10], ['Novembro', 11], ['Dezembro', 12]
		]

		# @sub_elementos_de_despesa = contexto_atual.sub_elementos_de_despesa.includes(:elemento_de_despesa).ativos
		# 	.where(base_elementos_de_despesa: {exibir_elemento_de_despesa: true}).order("base_elementos_de_despesa.codigo ASC, contabilidade_sub_elementos_de_despesa.codigo ASC ")
		@sub_elementos_de_despesa = contexto_atual.sub_elementos_de_despesa.includes(:elemento_de_despesa).ativos
			.where('base_elementos_de_despesa.codigo = ?', '44905200').where(base_elementos_de_despesa: {exibir_elemento_de_despesa: true})
			.order("base_elementos_de_despesa.codigo ASC, contabilidade_sub_elementos_de_despesa.codigo ASC ")

	end

	def tableless_relatorio_do_patrimonio_params
		begin
			params.require(:tableless_relatorio_do_patrimonio).permit(
				:relatorio, :button, :data, :data_inicial, :data_final, :unidade_orcamentaria, :almoxarifado, :centro_de_custo, :orcamento, 
				:unidade_gestora, :unidade_gestora_rela, :unidade_gestora_origem, :unidade_gestora_destino, :vida_util_boolean, :ordem, 
				:data_do_tombamento, :responsavel, :estado_do_bem, :ingresso_do_bem, :motivo_desreconhecimento, :grupos_de_bens, :tipo_de_transferencia,
				:sub_elemento_de_despesa, :mes_de_referencia,
				:responsavel_relatorio, :cargo_relatorio, :matricula_relatorio, :incluir_bens_cedidos,
				:responsavel_relatorio_destino,:cargo_relatorio_destino,:matricula_relatorio_destino
			)
		rescue ActionController::ParameterMissing
			nil
		end
	end
end
