module Patrimonio
class ImportacoesDeDadosPatrimoniaisController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!, except: [:imprimir]
	before_action :autoriza_usuario!, except: [:imprimir]
	before_action :set_importacao_de_dados_patrimonial, only: [
		:show, :edit, :update, :destroy, :carregar_dados_da_planilha, :gerar_bens_novos, :imprimir,
		:editar_bens_da_importacao, :atualiza_bens_da_importacao
	]

	# GET /patrimonio/importacoes_de_dados_patrimoniais
	def index
		@q = ImportacaoDeDadosPatrimonial.order(:id).search(params[:q])
		@importacoes_de_dados_patrimoniais = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /patrimonio/importacoes_de_dados_patrimoniais/1
	def show
	end

	# GET /patrimonio/importacoes_de_dados_patrimoniais/new
	def new
		@importacao_de_dados_patrimonial = ImportacaoDeDadosPatrimonial.new
	end

	# GET /patrimonio/importacoes_de_dados_patrimoniais/1/edit
	def edit
	end

	# POST /patrimonio/importacoes_de_dados_patrimoniais
	def create
		@importacao_de_dados_patrimonial = ImportacaoDeDadosPatrimonial.new(importacao_de_dados_patrimonial_params)

		if @importacao_de_dados_patrimonial.save
			redirect_to @importacao_de_dados_patrimonial, notice: 'Importacao de dados patrimonial foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /patrimonio/importacoes_de_dados_patrimoniais/1
	def update
		if @importacao_de_dados_patrimonial.update( importacao_de_dados_patrimonial_params )
			redirect_to @importacao_de_dados_patrimonial, notice: 'Importacao de dados patrimonial foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	def editar_bens_da_importacao
		@bens = @importacao_de_dados_patrimonial.bens_da_importacao_de_dados_patrimoniais.select{|bem| bem.bem_patrimonial.nil? }
		@bens.each do |bem|
			@importacao_de_dados_patrimonial.bens_da_importacao_de_dados_patrimoniais.build
		end
	end

	def atualiza_bens_da_importacao
		return if bloqueia_usuario_com_base_em 'editar_bens_da_importacao'
		@importacao_de_dados_patrimonial.transaction do
			if @importacao_de_dados_patrimonial.update(bens_da_importacao_de_dados_patrimoniais_params)
				mensagem = 'Bens atualizados com sucesso.'
				redirect_to patrimonio_importacoes_de_dados_patrimonial_path(@importacao_de_dados_patrimonial), notice: mensagem
			else
				render :editar_bens_da_importacao
			end
		rescue Exception => e
			render :editar_bens_da_importacao
			raise ActiveRecord::Rollback
		end
	end

	def carregar_dados_da_planilha
		if @importacao_de_dados_patrimonial.carregar_dados_da_planilha!
			redirect_to patrimonio_importacoes_de_dados_patrimonial_path(@importacao_de_dados_patrimonial), notice: 'O carregamento da planilha foi feita com sucesso.'
		else
			render :show
		end
	end

	def gerar_bens_novos
		if @importacao_de_dados_patrimonial.gerar_bens_novos!
			redirect_to patrimonio_importacoes_de_dados_patrimonial_path(@importacao_de_dados_patrimonial), notice: 'Bens gerados com sucesso.'
		else
			render :show
		end
	end

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

	def imprimir
    relatorio = params[:relatorio]

    if respond_to? relatorio.to_s, :private
      loa = CombinePDF.new
      loa << CombinePDF.parse(send(relatorio))
      loa.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
      send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
    else
      redirect_to patrimonio_importacoes_de_dados_patrimonial_path(@importacao_de_dados_patrimonial), alert: 'Relatório não encontrado'
    end
  end

  def verificacao_de_dados
		@configuracoes = Configuracao.last

    render_to_string pdf: "Termo de Movimentação",
      template: "patrimonio/importacoes_de_dados_patrimoniais/relatorios/verificacao_de_dados.pdf.slim",
      orientation: 'Landscape',
      disable_smart_shrinking: true,

      dpi: '96',
      header: {
        html: {
          template: 'layouts/_cabecalho_pdf_central_patrimonio.html.slim',
          locals: {
            titulo1: "Verificação de Dados"
          }
        },
        spacing: 5
      },
      footer: {
        html: {
          template: 'layouts/_rodape_pdf.html.slim'
        }
      },
      margin: @configuracoes.margens_customizadas
  end
  def dados_gerais
		@configuracoes = Configuracao.last

    render_to_string pdf: "Termo de Movimentação",
      template: "patrimonio/importacoes_de_dados_patrimoniais/relatorios/dados_gerais.pdf.slim",
      orientation: 'Landscape',
      disable_smart_shrinking: true,

      dpi: '96',
      header: {
        html: {
          template: 'layouts/_cabecalho_pdf_central_patrimonio.html.slim',
          locals: {
            titulo1: "Dados Gerais"
          }
        },
        spacing: 5
      },
      footer: {
        html: {
          template: 'layouts/_rodape_pdf.html.slim'
        }
      },
      margin: @configuracoes.margens_customizadas
  end

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


	# DELETE /patrimonio/importacoes_de_dados_patrimoniais/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@importacao_de_dados_patrimonial)
		redirect_to patrimonio_importacoes_de_dados_patrimoniais_url, mensagem
	end

	private
	def set_importacao_de_dados_patrimonial
		@importacao_de_dados_patrimonial = ImportacaoDeDadosPatrimonial.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def importacao_de_dados_patrimonial_params
		params.require(:patrimonio_importacao_de_dados_patrimonial).permit(:data_de_importacao, :nome, :documento, :status)
	end

	def bens_da_importacao_de_dados_patrimoniais_params
		params.require(:patrimonio_importacao_de_dados_patrimonial).permit(
			bens_da_importacao_de_dados_patrimoniais_attributes: [:id, :patrimonio_bem_id, :item_id, :_destroy]
		)
	end

end
end
