class Licitacao::Contratado < ApplicationRecord
	has_paper_trail

	belongs_to :pessoa_do_projeto, class_name: 'Licitacao::PessoaDoProjeto', inverse_of: :contratados
	has_one :contrato, class_name: 'Licitacao::Contrato', inverse_of: :contratado
	has_one :aditivo, class_name: 'Licitacao::Aditivo', inverse_of: :contratado

	delegate :projeto, to: :pessoa_do_projeto
	delegate :pessoa, to: :pessoa_do_projeto

	scope :que_devem_ir_pro_sim, -> { where("licitacao_aditivos.status = ? AND licitacao_aditivos.envia_pro_sim is true AND licitacao_aditivos.modalidade in (?)", Licitacao::Aditivo.status["confirmado"], [Licitacao::Aditivo.modalidades["acrescimo"],Licitacao::Aditivo.modalidades["reducao"],Licitacao::Aditivo.modalidades["por_prazo"],Licitacao::Aditivo.modalidades["reajuste_de_valor_acrescimo"],Licitacao::Aditivo.modalidades["reajuste_de_valor_decrescimo"],Licitacao::Aditivo.modalidades["prazo_e_acrescimo"],Licitacao::Aditivo.modalidades["prazo_e_reducao"],Licitacao::Aditivo.modalidades["renovacao"],Licitacao::Aditivo.modalidades["prazo_e_reajuste_acrescimo"],Licitacao::Aditivo.modalidades["prazo_e_reajuste_decrescimo"]]) }

	# TCM
	def to_sim
		begin
			valida_cep_pessoa
			if self.contrato.present?
				contrato_principal = self.contrato
				numero_do_contrato = contrato_principal.numero
				data_do_contrato_firmado = contrato_principal.data_do_contrato
				gestor_da_unidade = contrato.unidade_orcamentaria_do_exercicio.unidade_gestora.gestor_no_periodo(contrato.data_do_contrato)
			else
				contrato_principal = self.aditivo.contrato
				numero_do_contrato = contrato_principal.numero + aditivo.numero.digitos(2)
				data_do_contrato_firmado = self.aditivo.data_do_aditivo
				gestor_da_unidade = aditivo.unidade_orcamentaria_sim.unidade_gestora.gestor_no_periodo(aditivo.data_do_aditivo)
			end
	
			texto = ""
			texto << "513".to_s.sim_preenche(3) + ","
			texto << Configuracao.first.codigo_do_municipio_no_tcm.to_s.sim_preenche(3) + ","
			texto << gestor_da_unidade.cpf.sim_preenche(11) + ","
			texto << numero_do_contrato.sim_limite(15) + ","
			texto << data_do_contrato_firmado.sim_data + ","
			texto << (pessoa.pessoa_juridica? ? "1" : "2").sim_limite(1) + ","
			texto << (pessoa.pessoa_juridica? ? pessoa.cnpj : pessoa.cpf).sim_limite(25) + ","
			texto << pessoa.nome.sim_limite(59) + ","
			texto << pessoa.endereco_completo.gsub(/["\r\n]/, "").sim_limite(255) + ","
			texto << (pessoa.telefone.nil? ? "".sim_limite(1) : pessoa.telefone.sim_limite(11)) + ","
			texto << pessoa.cep.sim_limite(8) + ","
			texto << pessoa.cidade.nome.sim_limite(30) + ","
			texto << pessoa.cidade.estado.uf.sim_limite(2) + ","
			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

	def valida_cep_pessoa
		raise "O CEP do Fornecedor deve ser informado: " << "#{pessoa.nome}" if pessoa.cep.nil?
	end

	def descricao
		"#{pessoa.nome}"
	end

end
