feat(modo-local): CRM 100% local sin dependencia de Monday.com
Nuevas tablas: - ActividadLocal (historial de llamadas, reuniones, tareas) - AsignacionLocal (round-robin local) - fechaLimite en LeadCaptura Servicios nuevos: - actividad-local.service.ts (CRUD actividades) - local-canal.ts (canal de envío para recordatorios) - seed-modo-local.js (activar modo local) Mi día local mejorado: - Mis actividades hoy (filtros usuario/fecha/estado) - Apartados por vencer (con fechaLimite real) - Equipo (contadores por vendedor, solo coordinador/admin) - unidadCodigo en oportunidades desde datosJson Automatizaciones locales: - Round-robin: asigna leads sin vendedor + crea actividad - Inactividad: detecta oportunidades >10 días sin update - Escalado: alerta oportunidades >48h sin contacto Reportes: actividadesAbiertas + parcial:false en modo local Cron wiring: crons locales cuando Monday caído 661 tests verdes.
This commit is contained in:
67
api-gateway/scripts/seed-modo-local.js
Normal file
67
api-gateway/scripts/seed-modo-local.js
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Activa el modo local forzado en ConfiguracionSistema.
|
||||
*
|
||||
* 1. Pon `modo_local_forzado = true` en ConfiguracionSistema
|
||||
* 2. Verifica que unidades locales existen (count > 0)
|
||||
* 3. Verifica que roles existen
|
||||
* 4. Log: "Modo local activado. Monday deshabilitado."
|
||||
*
|
||||
* Idempotente: puede ejecutarse múltiples veces sin efectos adversos.
|
||||
*
|
||||
* Uso: npx tsx scripts/seed-modo-local.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() {
|
||||
// 1. Activar modo local forzado
|
||||
console.log('⚙️ Activando modo local forzado...')
|
||||
await prisma.configuracionSistema.upsert({
|
||||
where: { clave: 'modo_local_forzado' },
|
||||
create: { clave: 'modo_local_forzado', valor: 'true' },
|
||||
update: { valor: 'true' },
|
||||
})
|
||||
console.log(' ✓ modo_local_forzado = true')
|
||||
|
||||
// 2. Verificar que unidades locales existen
|
||||
const unidadesCount = await prisma.unidad.count()
|
||||
if (unidadesCount === 0) {
|
||||
console.warn(' ⚠️ No hay unidades locales. Ejecuta seed-unidades-locales.js primero.')
|
||||
} else {
|
||||
console.log(` ✓ ${unidadesCount} unidades locales verificadas`)
|
||||
}
|
||||
|
||||
// 3. Verificar que roles existen
|
||||
const rolesCount = await prisma.rolConfiguracion.count()
|
||||
if (rolesCount === 0) {
|
||||
console.warn(' ⚠️ No hay roles configurados. Ejecuta seed-config.js primero.')
|
||||
} else {
|
||||
console.log(` ✓ ${rolesCount} roles configurados verificados`)
|
||||
}
|
||||
|
||||
// 4. Verificar que usuarios existen
|
||||
const usuariosCount = await prisma.usuario.count()
|
||||
if (usuariosCount === 0) {
|
||||
console.warn(' ⚠️ No hay usuarios. Ejecuta seed-usuarios.ts primero.')
|
||||
} else {
|
||||
console.log(` ✓ ${usuariosCount} usuarios verificados`)
|
||||
}
|
||||
|
||||
console.log('\n✅ Modo local activado. Monday deshabilitado.')
|
||||
console.log(' La API operará con tablas locales (LeadCaptura, ActividadLocal, etc.)')
|
||||
console.log(' Los crons de Monday se saltarán; los crons locales correrán en su lugar.')
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((err) => {
|
||||
console.error('❌ Error en seed:', err)
|
||||
process.exit(1)
|
||||
})
|
||||
.finally(() => prisma.$disconnect())
|
||||
Reference in New Issue
Block a user