class Contabilidade::AcompanhamentoDeParcelamentoDoRpps < ApplicationRecord
	has_paper_trail

	belongs_to :parcelamento_do_rpps, class_name: 'Contabilidade::ParcelamentoDoRpps', inverse_of: :acompanhamentos_de_parcelamento_do_rpps

	validates_presence_of :numero_da_parcela, :data_do_vencimento, :data_do_pagamento, :valor_pago_do_principal, :parcelamento_do_rpps_id

	validates_uniqueness_of :numero_da_parcela, scope: :parcelamento_do_rpps_id

	def verifica_valor_total_da_parcela_com_o_saldo_a_pagar
		if parcelamento_do_rpps
			parcelamento_do_rpps.saldo_do_parcelamento - valor_do_parcelamento
		end
	end

	def valor_do_parcelamento_e_valido?
		if valor_do_parcelamento
			verifica_valor_total_da_parcela_com_o_saldo_a_pagar >= 0
		end
	end

	def valor_do_parcelamento
		if valor_pago_do_principal
			valor_pago_do_principal + valor_pago_de_juros_e_multa.to_f
		end
	end

	def enviado_para_o_sim?
		arquivo_id.present?
	end

	def to_sim(data_referencia)
		# Variáveis necessárias para gerar o SIM
		begin
			exercicio_do_orcamento = parcelamento_do_rpps.orcamento.exercicio.to_s
			unidade_orcamentaria = parcelamento_do_rpps.orcamento.unidades_orcamentarias.joins(:tipo_de_unidade_administrativa).find_by('base_tipos_de_unidades_administrativas.codigo = ?', "07")
	
			texto = ""
			texto << "975".sim_preenche(3) + ","
			texto << Configuracao.first.codigo_do_municipio_no_tcm.sim_preenche(3) + ","
			texto << exercicio_do_orcamento.sim_limite(4, "00") + ","
			texto << unidade_orcamentaria.orgao.codigo.sim_preenche(2) + ","
			texto << unidade_orcamentaria.codigo.codigo_uo_to_sim + ","
			texto << parcelamento_do_rpps.decreto_de_lei.numero.to_s.sim_limite(10) + ","
			texto << parcelamento_do_rpps.decreto_de_lei.data_da_publicacao.sim_data + ","
			texto << parcelamento_do_rpps.decreto_de_acordo.numero.to_s.sim_limite(10) + ","
			texto << numero_da_parcela.to_s.sim_limite(3) + ","
			texto << data_do_vencimento.sim_data + ","
			texto << data_do_pagamento.sim_data + ","
			texto << valor_pago_do_principal.to_f.to_s.sim_valor + ","
			texto << valor_pago_de_juros_e_multa.to_f.to_s.sim_valor + ","
			texto << data_referencia.to_s
	
			return texto
		rescue => e
			if e.class.to_s == "NoMethodError"
				atributo_falho = e.message.split(" ")[2]
				coluna = CSV.parse(texto, :headers => false).last.count
				raise e.mensagem_traduzida(self, "", atributo_falho, coluna)
			else
				raise e
			end
		end
	end
end
