feat(9-mejoras): limpieza leads + admin CRUD + calendario + CRM360 FRASA
1. Leads limpiados (207 eliminados, 18 apartados conservados) 2. Round-robin desactivado (config round_robin_habilitado=false) 3. Admin puede borrar/reasignar/mover leads (DELETE/PATCH/POST) 4. Calendario: fechaCita guardada y pasada correctamente 5. Avisos Monday eliminados (BannerModoLocal, ChipPendienteSync, vinculación) 6. Contactos filtrados por usuario asignado 7. Modal bitácora: notas persisten entre fases 8. Fases oportunidades: Agendo→Afluencia→Cotizar→Aparto 9. Toast de nota eliminado en cambios de status 10. Branding: CRM360 FRASA + logo en todas las apps 11. 7 apps construidas
This commit is contained in:
60
api-gateway/scripts/limpiar-leads.js
Normal file
60
api-gateway/scripts/limpiar-leads.js
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Elimina todos los registros de LeadCaptura donde board = 'LEADS' o
|
||||
* board = 'OPORTUNIDADES'. Muestra conteo antes y después.
|
||||
*
|
||||
* Uso: npx tsx scripts/limpiar-leads.js
|
||||
*/
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import dotenv from 'dotenv'
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
|
||||
const raizApi = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
|
||||
dotenv.config({ path: [path.resolve(raizApi, '.env'), path.resolve(raizApi, '..', '.env')] })
|
||||
|
||||
const prisma = new PrismaClient()
|
||||
|
||||
async function main() {
|
||||
// ── Conteo antes ──
|
||||
const total = await prisma.leadCaptura.count()
|
||||
const leads = await prisma.leadCaptura.count({ where: { board: 'LEADS' } })
|
||||
const oportunidades = await prisma.leadCaptura.count({ where: { board: 'OPORTUNIDADES' } })
|
||||
const otros = total - leads - oportunidades
|
||||
|
||||
console.log('── Antes de limpiar ──')
|
||||
console.log(` Total LeadCaptura: ${total}`)
|
||||
console.log(` board = LEADS: ${leads}`)
|
||||
console.log(` board = OPORTUNIDADES: ${oportunidades}`)
|
||||
console.log(` Otros (APARTADO, etc.): ${otros}`)
|
||||
|
||||
if (leads + oportunidades === 0) {
|
||||
console.log('\nNo hay leads ni oportunidades que borrar.')
|
||||
return
|
||||
}
|
||||
|
||||
// ── Eliminar leads y oportunidades ──
|
||||
const deleted = await prisma.leadCaptura.deleteMany({
|
||||
where: { board: { in: ['LEADS', 'OPORTUNIDADES'] } },
|
||||
})
|
||||
console.log(`\nEliminados: ${deleted.count} registros`)
|
||||
|
||||
// ── Conteo después ──
|
||||
const totalDespues = await prisma.leadCaptura.count()
|
||||
const leadsDespues = await prisma.leadCaptura.count({ where: { board: 'LEADS' } })
|
||||
const opDespues = await prisma.leadCaptura.count({ where: { board: 'OPORTUNIDADES' } })
|
||||
const otrosDespues = totalDespues - leadsDespues - opDespues
|
||||
|
||||
console.log('\n── Después de limpiar ──')
|
||||
console.log(` Total LeadCaptura: ${totalDespues}`)
|
||||
console.log(` board = LEADS: ${leadsDespues}`)
|
||||
console.log(` board = OPORTUNIDADES: ${opDespues}`)
|
||||
console.log(` Otros (APARTADO, etc.): ${otrosDespues}`)
|
||||
console.log('\n✅ Limpieza completada.')
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((err) => {
|
||||
console.error('❌ Error:', err)
|
||||
process.exit(1)
|
||||
})
|
||||
.finally(() => prisma.$disconnect())
|
||||
@@ -28,6 +28,7 @@ const CONFIGS_DEFAULT = [
|
||||
{ clave: 'auto_logout', valor: 'true' },
|
||||
{ clave: 'mostrar_precios_lista', valor: 'true' },
|
||||
{ clave: 'max_upload_mb', valor: '10' },
|
||||
{ clave: 'round_robin_habilitado', valor: 'false' },
|
||||
]
|
||||
|
||||
// ── RolConfiguracion: módulos por rol (matriz de config/roles.ts) ──────
|
||||
|
||||
Reference in New Issue
Block a user