FactoryBot.define do
	factory :empenho_22090001, aliases: [:empenho], class: 'Contabilidade::Empenho' do
		orcamento_id {
			Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016) ).id
		}

		pessoa_id {
			Base::Pessoa.find_or_create_by!( FactoryBot.attributes_for( :pessoa_fisica ) ).id
		}

		pessoa_conta_bancaria_id {
			Base::PessoaContaBancaria.find_or_create_by!(FactoryBot.attributes_for(:pessoa_conta_bancaria, pessoa_id: pessoa_id)).id
		}

		sub_elemento_de_despesa_id {
			Contabilidade::SubElementoDeDespesa.find_or_create_by!(FactoryBot.attributes_for( :sub_elemento_de_despesa_outros_materiais_de_consumo )).id
		}

		orcamento_da_despesa_id {
			Loa::OrcamentoDaDespesa.find_or_create_by!( FactoryBot.attributes_for(:orcamento_da_despesa_saude) ).id
		}
		# after(:build) do |objeto|
		# 	objeto.orcamento ||= Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016) )
		# 	objeto.pessoa ||= Base::Pessoa.find_or_create_by!( FactoryBot.attributes_for( :pessoa_fisica ) )
		# 	objeto.pessoa_conta_bancaria ||= Base::PessoaContaBancaria.find_or_create_by!(FactoryBot.attributes_for(:pessoa_conta_bancaria, pessoa_id: pessoa_id))
		# 	objeto.sub_elemento_de_despesa ||=	Contabilidade::SubElementoDeDespesa.find_or_create_by!(FactoryBot.attributes_for( :sub_elemento_de_despesa_outros_materiais_de_consumo ))
		# 	objeto.orcamento_da_despesa ||= Loa::OrcamentoDaDespesa.find_or_create_by!( FactoryBot.attributes_for(:orcamento_da_despesa_saude) )
		# 	objeto.descriminacao_obrigatoria_de_itens = false
		# 	objeto.descrimina_itens_processo_ou_contrato = false
		# end
		
		after(:build) { |empenho| empenho.subacao_id = empenho.subacao.try(:id) }
		before(:create) { |empenho| empenho.subacao_id = empenho.subacao.try(:id) }
	  

		data_do_empenho { Faker::Date.between(from: 1.year.ago, to: Date.today) }
		data_de_solicitacao { Faker::Date.between(from: 1.year.ago, to: Date.today) }
		modalidade { 'global' }
		historico { Faker::Lorem.sentence }
		status { 'confirmado' }
		complementacao_da_fonte_de_recurso { 'sem_complemento' }
		valor { Faker::Number.decimal(l_digits: 3, r_digits: 2) }
		descrimina_itens_processo_ou_contrato { false }

		trait :solicitacao do
			status {'solicitado'}
		end

		trait :confirmado do
			status {'confirmado'}
		end

		vincula_processo_contrato { false }

		trait :derivado_de_licitacao do
			vincula_processo_contrato { true }
			projeto_id {
				(Licitacao::Projeto.find_by(FactoryBot.attributes_for(:licitacao_projeto)) || FactoryBot.create(:licitacao_projeto, :por_item)).id
			}
		end

		trait :por_contrato do
			contrato_id {
				FactoryBot.create(:licitacao_contrato, :com_lotes_do_contrato).id
			}
		end

		trait :unidade_orcamentaria_diferente do
			orcamento_da_despesa_id {
				Loa::OrcamentoDaDespesa.find_or_create_by!( FactoryBot.attributes_for(:orcamento_da_despesa_fundo_especial_saude) ).id
			}
		end
	end

	factory :empenho_com_diaria, class: 'Contabilidade::Empenho' do
		orcamento { Orcamento.find_or_create_by(attributes_for(:orcamento_2016)) }
		diaria { Contabilidade::Diaria.find_or_create_by(attributes_for(:diaria)) }
		pessoa { diaria.agente_publico_municipal.pessoa }
		sub_elemento_de_despesa { Contabilidade::SubElementoDeDespesa.find_or_create_by(attributes_for(:sub_elemento_de_despesa_outros_materiais_de_consumo)) }
		orcamento_da_despesa { Loa::OrcamentoDaDespesa.find_or_create_by(attributes_for(:orcamento_da_despesa_saude)) }
		pessoa_conta_bancaria { Base::PessoaContaBancaria.find_or_create_by(attributes_for(:pessoa_conta_bancaria, pessoa: pessoa)) }
		data_do_empenho { '2016-09-22' }
		modalidade { 'ordinario' }
		historico { 'Histórico do empenho...' }
		data_de_solicitacao { '2016-09-21' }
		descriminacao_obrigatoria_de_itens { false }
		valor { diaria.valor_total }
	end

	factory :empenho_de_restos_a_pagar, class: 'Contabilidade::Empenho' do
		orcamento { Orcamento.find_or_create_by(attributes_for(:orcamento_2016)) }
		sub_elemento_de_despesa { Contabilidade::SubElementoDeDespesa.find_or_create_by(attributes_for(:sub_elemento_de_despesa_outros_materiais_de_consumo)) }
		orcamento_da_despesa { Loa::OrcamentoDaDespesa.find_or_create_by(attributes_for(:orcamento_da_despesa_saude)) }
		pessoa_conta_bancaria { Base::PessoaContaBancaria.find_or_create_by(attributes_for(:pessoa_conta_bancaria, pessoa: pessoa)) }
		data_do_empenho { '2016-09-22' }
		modalidade { 'ordinario' }
		historico { 'Histórico do empenho...' }
		data_de_solicitacao { '2016-09-21' }
		descriminacao_obrigatoria_de_itens { false }
		restos_a_pagar {true}
		valor { 100 }
	end

	factory :empenho_de_2022, class: 'Contabilidade::Empenho' do
		orcamento { Orcamento.find_or_create_by(attributes_for(:orcamento_2022)) }
		pessoa { Base::Pessoa.find_or_create_by!( FactoryBot.attributes_for( :pessoa_fisica ) ) }
		sub_elemento_de_despesa { Contabilidade::SubElementoDeDespesa.find_or_create_by(attributes_for(:sub_elemento_de_despesa_outros_materiais_de_consumo)) }
		orcamento_da_despesa { Loa::OrcamentoDaDespesa.find_or_create_by(attributes_for(:orcamento_da_despesa_saude)) }
		pessoa_conta_bancaria { Base::PessoaContaBancaria.find_or_create_by(attributes_for(:pessoa_conta_bancaria, pessoa: pessoa)) }
		data_do_empenho { '2012-09-22' }
		modalidade { 'ordinario' }
		historico { 'Histórico do empenho...' }
		data_de_solicitacao { '2012-09-21' }
		descrimina_itens_processo_ou_contrato { false }
		descriminacao_obrigatoria_de_itens { false }
		valor { 1000}
	end
end
