Executando verificação de segurança...
1

[DÚVIDA] Como fazer a ordenação de leads dentro de um pipeline de vendas

Introdução

Olá pessoal, atualmente estou trabalhando em um novo módulo do sistema da empresa onde trabalho. Esse novo módulo envolve a criação de funis de vendas, onde os executivos da empresa podem cadastrar leads e gerenciar em que etapa da prospecção e venda eles estão.

Como pode ser observado na imagem abaixo, dentro de um pipeline existem diversas colunas, que como foi dito anteriormente, servem para gerenciar as etapas de prospecção e venda dos leads. Dentro de cada coluna, há diversos cards, que representam os negócios (deals, leads) daquele vendedor.
image

Dúvida

Agora vem a minha dúvida: como fazer a ordenação desses leads dentro das colunas de maneira eficiente, sem precisar fazer alterações em massa no banco? Quero que seja possível para o usuário arrastar leads para outras colunas e organizar na ordem que desejar, podendo, por exemplo, colocar um certo lead abaixo de outros. Alguém tem alguma solução performática para esse problema?

Uma das soluções que me apresentaram foi adicionar um atributo order (float) no banco e, sempre que a ordem de um card for alterada, calcular a média do order dos cards acima e abaixo. No entanto, não sei se essa é uma boa ideia.

Carregando publicação patrocinada...
1

Estes cards são de algum framework? Verificou se eles emitem algum evento quando sao reposicionados entre colunas e linhas? Se emitem evento, quais dados retornam? Assim talvez vc poderia remapear o objeto. Isso porque imagino que a origem dos dados possa ser algo assim:

{
qualified:[{id:9,order:1,name:"Fulanox"},{id:3,order:2,name:"Fulanoy"},{id:1,order:3,name:"Fulanoz"}],
contactmade:[{id:2,order:1,name:"Fulanoa"},{id:4,order:2,name:"Fulanob"},{id:5,order:3,name:"Fulanoc"}]
}

Se mudar o id 9 para a coluna contactmade na posição 2

obj.qualified[0].newposition = 2
obj.contactmade.push(qualified[0])
obj.qualified[0].del = true

depois de marcar as mudanças percorra o objeto e remova os indices onde 'del==true', e reordene a coluna que recebeu novo objeto deixando-o na ordem igual a newposition e finalmente persista o objeto no banco de dados.

Em resumo, minha análise foi imaginando que a origem dos dados e um objeto json parecido com o exemplo acima(com todas as colunas) e que os cards emitem eventos com dados das posições, o que permite alterar o json em memoria e fazer um refresh com o objeto alterado.

Acredito que nao seja a solução mas espero contribua de alguma forma.

Boa sorte!