class Obra::Relatorios::ObrasController < ApplicationController
	include ControllerConcern

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

	def imprimir
		relatorio = params[:relatorio]

		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			loa << CombinePDF.parse(send(relatorio))
			send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Demonstrativo selecionado não existe'
		end
	end

	private
		def documento
			@documento_da_obra = Obra::DocumentoDaObra.find_by(id: params[:documentos_da_obra_id])

			segundo_titulo =  @documento_da_obra.localizar(:tipo_de_documento)

			render_to_string pdf: "documento",
				template: "obra/relatorios/documento.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,
				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: { titulo1: "Obra N° #{@documento_da_obra.obra.try(:codigo)}", titulo2: segundo_titulo}
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def documento_da_medicao_da_obra
			@documento_da_medicao_da_obra = Obra::DocumentoDaMedicaoDaObra.find_by(id: params[:documentos_da_medicao_da_obra_id])
			titulo_numero_do_documento = @documento_da_medicao_da_obra.numero.present? ? "Documento Nº #{@documento_da_medicao_da_obra.numero}" : ""

			render_to_string pdf: "documento_da_medicao_da_obra",
				template: "obra/relatorios/documento_da_medicao_da_obra.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,

				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: { titulo1: "Medição da Obra N° #{@documento_da_medicao_da_obra.medicao_da_obra.try(:numero)}", titulo2: titulo_numero_do_documento}
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def relatorio_de_medicao_em_liquidacao
			@medicao_da_obra = Contabilidade::MedicaoDaObra.find_by(id: params[:medicao_da_obra_id])

			render_to_string pdf: "relatorio_de_medicao_em_liquidacao",
				template: "obra/relatorios/relatorio_de_medicao_em_liquidacao.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,

				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: { titulo1: "Medição da Obra N° #{@medicao_da_obra.try(:numero)}", titulo2: "RELATÓRIO DE MEDIÇÃO EM LIQUIDAÇÃO"}
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def ordem_de_servico
			@ordem_de_servico = Obra::OrdemDeServico.find_by(id: params[:ordem_de_servico_id])

			render_to_string pdf: "ordem_de_servico",
				template: "obra/relatorios/ordem_de_servico.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,

				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: { titulo1: "#{@ordem_de_servico.contrato.unidade_orcamentaria.nome.try(:upcase)}", titulo2: "" }
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def fiscalizacao
			@fiscalizacao = Obra::Fiscalizacao.find_by(id: params[:fiscalizacao_id])
			periodo = ""
			@medicao_da_obra = nil

			if params[:data_inicial].present?
				data_final = params[:data_final].present? ? params[:data_final] : Date.today
				@fotos_da_fiscalizacao = @fiscalizacao.fotos_da_fiscalizacao.where('obra_fotos_da_fiscalizacao.data_do_cadastro BETWEEN ? and ?', params[:data_inicial].to_date, data_final.to_date )
				@verificacoes_da_fiscalizacao = @fiscalizacao.verificacoes_da_fiscalizacao.where('obra_verificacoes_da_fiscalizacao.data_do_cadastro BETWEEN ? and ?', params[:data_inicial].to_date, data_final.to_date )
				@providencias_da_fiscalizacao = @fiscalizacao.providencias_da_fiscalizacao.where('obra_providencias_da_fiscalizacao.data_do_cadastro BETWEEN ? and ?', params[:data_inicial].to_date, data_final.to_date )
				periodo = "Período: #{params[:data_inicial]} a #{data_final}"
			else
				@fotos_da_fiscalizacao = @fiscalizacao.fotos_da_fiscalizacao
				@verificacoes_da_fiscalizacao = @fiscalizacao.verificacoes_da_fiscalizacao
				@providencias_da_fiscalizacao = @fiscalizacao.providencias_da_fiscalizacao
			end

			if params[:medicao_da_obra_id].present?
				@medicao_da_obra = Contabilidade::MedicaoDaObra.find(params[:medicao_da_obra_id])
			end

			render_to_string pdf: "fiscalizacao",
				template: "obra/relatorios/fiscalizacao.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,

				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: { titulo1: "#{@fiscalizacao.obra.contrato.unidade_orcamentaria.nome.try(:upcase)}", titulo2: periodo }
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def relatorio_de_alertas
			@obras = Contabilidade::Obra.all
			@transferencias = Obra::Transferencia.convenio.where.not(status: "executado")
			render_to_string pdf: "relatorio_de_alertas",
				template: "obra/relatorios/relatorio_de_alertas.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,

				dpi: '96',
				header: {
					html:	{
							template: 'layouts/_cabecalho_pdf.html.slim',
							locals: { titulo1:  'RELATÓRIO DE ALERTAS' , titulo2: "" }
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
		end

		def disponibiliza_dependencias
			@configuracoes = Configuracao.last
		end
end
