Cobranca.do_cliente(1).simular_repeticoes
O chamado acima irá buscar todas cobranças do cliente 1 e quando chamar simular repetições , o postgres irá simular cobranças de TODOS OS CLIENTES. Portanto Teremos um problema muito sério de performance em um futuro muito próximo
Outro problema é que o filtro avançado não funciona . Se usuário filtrar no avançado por tipo de data created_at não vai fucionar, pois a função do postgres só trabalha com vencimento
A boa notícia é que tem SOLUÇÃO e está descrita abaixo.
Validar inicio e fim
-
no front
Tirar "MOSTRAR TODOS" do period picker
Validar inicio e fim - front deve obrigar usuário a informar inicio e fim (filtro avançado)
-
no back
fail "Faltando inicio e fim nos parametros de busca" unless inicio && fim
simular_repeticoes deve suportar vencimento e created_at que são enviados pelo filtro do front
scope :buscar
scoped = all
input_date = filtro[:input_date].presence # created_at etc - o que vier do filtro do front
...
# realizar as busca avançado/simples normalmente
...
molde_ids = scoped.moldes_repeticoes.select(:id).map(&:id) # moldes_repeticoes já existe no grooming
if molde_ids.any?
# O front sempre vai enviar o inicio e o fim
scoped = scoped.simular_repeticoes(molde_ids, input_date, inicio, fim)
end
return scoped.uniq
end
Cobranca.buscar({input_date: 'vencimento', inicio: junho, fim: julho}).paginate(page: 1, per_page: 15)
Cobranca.buscar({q: '#24', input_date: 'vencimento', inicio: junho, fim: julho}) # o front tem que enviar uma data
Analisar se faz sentido estes parâmetros
simular_repeticoes(molde_ids, input_date, inicio, fim)
Remover qualquer lógica relacionada slash_ghost no Rails e Postgres pois agora simulamos repetições em cima dos moldes encontrados pelo scope :buscar